我知道->
運算符可以是變量方向的指針,但爲什麼用它的時候有指針運算符*
,有什麼區別,可以嗎喜歡一個在另一個?例如:->運算符與指針之間的區別*(C++)
a*b
指是指向B(好吧,我可能是錯誤的原諒我,因爲我是一個初學者?)
是它等同於a->b
?
and a<-b
含義b是指向?
如果是這樣,是否有可能依靠->
,因爲它更簡單?
我知道->
運算符可以是變量方向的指針,但爲什麼用它的時候有指針運算符*
,有什麼區別,可以嗎喜歡一個在另一個?例如:->運算符與指針之間的區別*(C++)
a*b
指是指向B(好吧,我可能是錯誤的原諒我,因爲我是一個初學者?)
是它等同於a->b
?
and a<-b
含義b是指向?
如果是這樣,是否有可能依靠->
,因爲它更簡單?
a*b
通常表示「乘以a
和b
」。 C++只有很少的詞彙元素,其中很多都有很多不同的用途,所以上下文很重要。
a->b
是成員訪問權並對應於(*a).b
,即訪問由a
指向的值的b
成員。
請注意,*
和->
運算符都可能被重載。
我打算讓它成爲* b,例如int a * b –
你的意思是'int a,* b;'? –
@AhmedDhia:C++是空白不敏感的。 –
對我來說,你似乎對指針的功能和*
所屬的位置感到困惑。
指針是一種特殊類型的對象,指向另一個對象到,而不是從一個對象。
指針可以聲明如下:
int *a;
這裏,*
指定a
是一個指針。指針類型與它們指向的對象的類型是不同的類型。
但a
指的是不確定的。您需要指定地址以使a
指向某個東西。
int b = 2;
而讓a
點b
:
a = &b;
這裏,一元&
運算符用於採取b
的要做到這一點,讓我們做一個整數(這裏值2
初始化) 地址。然後將其分配給a
,然後a
指向b
。
當然,指針也可以初始化。上面的語句可以更換:
int b = 2;
int *a = &b;
那麼,你如何讓b
的從a
價值?你可以做到這一點的提領a
:
std::cout << *a << std::endl;
這將打印2
。一元運算符*
在此處用於解除引用a
。這*
是不同於*
以上聲明a
並不應該混淆。
++*a;
這增加了b
。 b
現在的值爲3
。
可以通過分配另一個地址使a
指向一個不同的對象:
int c = 3;
a = &c;
現在a
點c
,而不是b
。
您可以將指針,這將指向同一個對象複製:
int *d = a;
現在d
點c
,這a
也指出。
參考是從不同的指針:
int &e = b;
&
在這裏用來指定e
是一個參考。這&
是不同於&
用於採取地址,不應該混淆。這裏,e
是指到b
。
他們指一個對象,就好像它們是該對象總是行動:
++e;
這增加b
。 b
現在的值爲4
。
不同於指針引用必須總是指一個對象:
int &f; // error
的參考還可以指一個指針:
int *&g = a;
g
指a
。
但指針不能指向一個參考:
int &*h = &e; // error
非常感謝:)這清楚地表明瞭一個問題,但是,我如何防止打印內存地址或指針位置的輸出? –
你不應該給內存地址輸出流。遵循上面的例子,'std :: cout << d << std :: endl'將輸出'c'的地址。 –
你似乎誤解了什麼' - >'手段。它並不意味着任何方向,它只是取消引用指向結構成員訪問的結構的指針。對於一個指向結構'a'和成員'b'的指針,表達式'a-> b'等於'(* a).b'。 ***另外***' - >'運算符在C語言(它來自何處)早期意味着其他內容。閱讀例如[這個老答案](http://stackoverflow.com/a/13366168/440558)瞭解更多詳情。 –
http://stackoverflow.com/a/6586248/6543574在這裏解釋,希望幫助:) – Lanfear
'a * b' _never_意味着'a'是指向'b'的指針。最接近的含義是,作爲聲明的一部分,它意味着'b'是指向'a'的指針(其中'a'是_type_)。在表達式中,'a * b'調用乘法。我的歉意是 – davmac