剛接觸 C 并試圖理解*and的使用&。
我想我理解&*var如果我想將指標的參考變數作為函式引數,或者只是作為一般指標的參考變數,這很有用。如果&and*被翻轉怎么辦?
*&在 C 中是多余的嗎?
這是一些代碼:
#include <iostream>
using namespace std;
int main(){
// example 1
int num = 10;
cout << *# // exact same as num?
// example 2
struct person
{
string name;
int age;
};
person me[3];
me[0].name = "my name";
me[0].age = 321;
cout << (*&me[0]).name << endl; // exact same as me[0].name?
return 0;
}
*&var兩者中的使用是否是cout多余的,因為&var它是一個地址,而*前面的那個&var意味著查看地址指向的變數?如果不是多余的,
*&var在C 中有什么用?
uj5u.com熱心網友回復:
在大多數情況下,*&var(獲取 的地址var,然后取消參考該地址以訪問var)和&*var(取消參考var以訪問它指向的事物,然后獲取該事物的地址)與僅使用var它本身相同。
但是,型別別可以多載operator&以回傳它想要的任何地址,并多載operator*以回傳它想要的任何參考。這些是唯一*&var與 和&*var可能不同的情況var。例如,這在智能指標和迭代器中很常見。
為了解決前一種情況,C 11 引入std::addressof()了獲取物件的地址,而不管它是否多載operator&,例如:
*&var-> *std::addressof(var)
&*var->std::addressof(*var)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/484004.html
