C++中的取地址符(&)


這個符號特別容易混淆, 因為在C++中, &有兩種不同用法:

  1. 獲得變量地址
  2. 引用傳遞

第一個例子,

int main()
{
	std::string s = "Hello";
	std::string*p = &s;
	std::cout << p << std::endl;
	std::cout << *p << std::endl;
	return 0;
}

0x7ffd05129510
Hello
[Finished in 0.2s]

例子中, 變量p使用*聲明為指針, 將變量s的地址通過&符號賦值給p.

int main()
{
	std::string s = "Hello";
	std::string &r = s;
	std::cout << s << std::endl;
	std::cout << r << std::endl;

	r = "New Hello";
	std::cout << s << std::endl;
	std::cout << r << std::endl;
	
    std::cout << &s << std::endl;
    std::cout << &r << std::endl;
    std::cout << (&s == &r) << std::endl;
	return 0;
}

Hello
Hello
New Hello
New Hello
0x7ffc844cc660
0x7ffc844cc660
1
[Finished in 0.2s]

例子中, 變量r是變量sreference, 在內存空間中指代相同的位置.
&可以用於函數變量引用聲明,

void foo(std::string& str)
{
	str[0] = 'a';
	std::cout << str << std::endl;
}
int main()
{
	std::string s = "Hello";
	foo(s);
	return 0;
}

在這個例子中, 變量str在函數foo中是變量s的 reference, 所有對str的操作, 相當於對s的操作.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM