的性質我感到困惑以下兩個聲明之間:混淆*操作
int *p=&a; //first
和
int *p; //second
p=&a;
的Asterisk *
不作爲引用操作。大多數我看到的地方是*
充當解除引用操作符。我的問題是,除第一種情況外,是否有任何情況下*
運算符不作爲解除引用運算符?
的性質我感到困惑以下兩個聲明之間:混淆*操作
int *p=&a; //first
和
int *p; //second
p=&a;
的Asterisk *
不作爲引用操作。大多數我看到的地方是*
充當解除引用操作符。我的問題是,除第一種情況外,是否有任何情況下*
運算符不作爲解除引用運算符?
*
僅作爲解除引用運算符僅在表達式中。
C聲明的(不可否認的)語法是基於「聲明遵循使用」的思想。因此,這些聲明:
int i;
int *p;
可以讀作 「i
是int
」 和*p
是int
。由於*p
是int
,因此p
必須是指向int
的指針。
(當然*
也乘法運算符,如果出現有兩個操作數)。
在聲明語句*
被認爲不是一個引用操作,但一個類型說明符的一部分。 int *p
表示p is a pointer to int
,您的第一行也將其初始化爲地址a
。第二行在正常的賦值語句中將a
的地址分配給p
。
p
仍然只是一個變量持有的東西。最好是分配給其他變量的地址,但是你可以隨意分配它(有些編譯器會讓它變得困難),然後通過取消引用來破壞程序!
&
運算符返回變量a
的內存地址,因此p
將指向變量a
的內存位置。
*
運營商被稱爲間接或deference運營商。它返回指向的內存位置的內容。
int *p;
p被聲明爲指針,以int
p = &a;
則p指向的a
地址雖然在C標準的正式定義是不同的,*
不會像在聲明一個引用操作。 C聲明背後的概念是它們顯示了表達式的類型。例如,int *p;
本質上說,「當我提領p
,其結果應該是一個int
」。
所以,雖然這不是deferences p
一個表達式,它說明一個。
我同意你的看法,爲了取消引用'p'我們寫'* p',而'p'表示指針變量本身,'* p'表示指針指向的int。 – boleto
乘法運算符? – nouney
@nouney你一定是在開玩笑...... – chanzerre
_is有任何情況下,*運營商不作爲解除運算符??? _,從你的問題的兄弟 – nouney