首先,我爲我可憐的英語感到抱歉,這不是我的第一語言。設置地址並初始化指針
這是我第一次研究指針,我發現它真的很奇怪。
我正在閱讀的書說*
marker表示'pa'表示的變量。
但是當我嘗試並初始化一個指針
int a;
int *pA =&a;
(它們在這種情況下使用*pA
),然後改變它,
* PA =&一個;
不起作用,和
PA =&一個;
工程。
所以我的查詢是「是否有初始化指針之間的任何區別,只是代??」
首先,我爲我可憐的英語感到抱歉,這不是我的第一語言。設置地址並初始化指針
這是我第一次研究指針,我發現它真的很奇怪。
我正在閱讀的書說*
marker表示'pa'表示的變量。
但是當我嘗試並初始化一個指針
int a;
int *pA =&a;
(它們在這種情況下使用*pA
),然後改變它,
* PA =&一個;
不起作用,和
PA =&一個;
工程。
所以我的查詢是「是否有初始化指針之間的任何區別,只是代??」
int a;
此堆棧
int* pA = &a;
這在棧上分配一個int指針並將其值,以指向上分配的整數。 '*'是聲明的一部分。
*pA = &a;
在這種情況下,'*'是一個運算符,表示「看哪裏pA點」,這是一個int。然後你試圖將int設置爲a的地址,這是不允許的。
pA = &a;
現在這與第二條語句相同。它將pA的值設置爲指向a。
我也很好奇當我分配一個指針和一個變量。 > int a,* p1; < - 像這樣 它工作!讓我覺得'*'包含在指針中。 – Rhee 2009-11-11 11:29:02
這只是兩個單獨聲明的簡寫。 *仍然是p1的聲明(int *)的一部分。我同意這不完全直觀,你只需要習慣它。在聲明中,*是類型的一部分。作爲一個操作員,它有不同的(但相關的)含義。 – 2009-11-11 14:25:42
當您創建一個指向您使用
int *pA;
之後,使用*pA
意味着你訪問價值指向指針。
當您使用&a
時,您使用的是Address-of Operator,它返回存儲變量a
(它是一個整數)的數據所存儲的內存位置的地址。
因此,正確的作業是pA = &a
,因爲您正在將地址a
複製到pA
,該地址應該保存內存位置的地址。
但*pA
代表該內存位置中的值(整數),因此將地址分配給*pA
不正確 - 這就是爲什麼正確的語法是pA = &a
。
是的,當你第一次聲明一個指針時,你可以指定內存地址。因爲您將它聲明爲指針,所以您使用*
運算符。但在其他地方,*pA
意味着採用該指針引用的值(而不是實際地址)。這有點奇怪,但你已經習慣了。因爲,說,「讓
*pA = &a;
:
所以,你可以這樣做:
int a;
int *pA = &a;
,你可以這樣做:
pA = &a;
但你不能做由pA
=指向值的值。「
但是,你可以這樣做:
*pA = a;
這就是你是如何設置的值通過pA的指向。希望這有點清楚。
在C,「宣言模仿使用」。
在聲明指針int
int *pa;
你可以看到,pa
是int *
或*pa
是int
。
您可以將指針指向int到pa
,或者您可以將int指定爲*pa
。
這就是爲什麼在上面的聲明之後,下面的語句「工作」。
*pa = 42;
pa = &a;
在聲明本身中,可以通過提供初始化值將其「轉換」爲定義。該定義適用於int*
類型的對象pa
,而不是*pa
。
int *pa = &a; /* initialize pa, which takes a `int*` */
pa = &b; /* change `pa` with a different `int*` */
*pa = 42; /* change the value pointed to by `pa` */
歡迎SO。 :) – BobbyShaftoe 2009-11-11 05:22:44
Ty,認爲這個地方真棒,人們善良,聰明。 希望我可以像你們一樣,然後我可以幫助在C領域有需要的人。 – Rhee 2009-11-11 05:26:22