int*p ,b = 5;
p = &b;
表示一個維數組,那麼什麼是輸出由下面的語句
printf("%d",p);
是它的一個地址給?如果它是一個地址,那麼告訴我它屬於哪個元素,請詳細解釋
int*p ,b = 5;
p = &b;
表示一個維數組,那麼什麼是輸出由下面的語句
printf("%d",p);
是它的一個地址給?如果它是一個地址,那麼告訴我它屬於哪個元素,請詳細解釋
p = &b
這不表示陣列!正如我解釋here,他們不是一回事。 b
只是一個整數值。如果您聲明b
爲int b[] = {1, 2, 3};
那麼p
將指向b
的第一個元素。
printf("%d",p);
這將打印p
的值,並且由於p
是一個指針和指向b
,這將打印b
的地址。 printf("%d", &b);
會給出相同的結果。
順便說一句,如果b
是一個數組,b[5]
將被翻譯成*(p + 5)
,所以你可以通過在數組的開頭添加元素的數量來讀取(和寫入)值。和b[5] == p[5] == *(b + 5) == *(p + 5)
!!!但不是因爲數組和指針是同一件事,只是因爲數組的名字轉化爲它的第一個元素的地址。
作爲一個方面說明,編譯器在編譯爲程序集時總是使用指針表示法(*(base + offset)
)。
該數組的第一個元素的地址。 (如果B爲一個數組) 使用的p ++通過陣列滾動
'p ++'不會幫助您滾動數組,它只會將指針的值增加1(與增加整數的方式大致相同)。您應該使用'[]'運算符來訪問數組的元素。 – 2011-04-12 16:58:23
我的意思是p ++會給你下一個數組元素的地址。 – anon 2011-04-12 18:00:25
指針而不是表示一維數組。它只是一個指向整數的指針。它可能指向數組的第一個元素,例如當你做int* p = new int[6]
時,但這是完全不同的;在這種情況下,您將爲六個整數的新數組分配空間,並將第一個數組的地址(或數組的開頭)存儲在p
中。
如果您打印p
它將打印它存儲的內存地址。如果p
「表示數組」(強調引號),那麼您將打印該數組的第一個元素的地址。
int*p ,b = 5;
p = &b;
是完全等效於:
int b = 5;
int *p = &b;
p最終被以int的指針。現在,它真的什麼P中結束了這段代碼會產生多大的影響相同(雖然B有一個完全不同的類型和值),因爲這:
int b[1] = {5};
int *p = b; // or int *p = &b[0];
在這兩種情況下p指向
肯定是一個int您可以視爲一個簡單的int,或者作爲大小爲1的一維數組中的第一個(也是唯一)元素。那麼,接踵而來的是合法的,並給出在這兩種情況下有意義的結果:
printf("%d is stored at %p\n", *p, p);
printf("%d\n",p[0]);
但是這幾乎是其中的相似之處。
這裏沒有陣列。 – 2011-04-12 16:45:32
這些不是您正在尋找的陣列? – MJB 2011-04-12 16:54:01
@JAMES @ MJB在數組的情況下,數組的名字將會給我第一個元素的地址,然後如果是指針,它將會使我反彈的東西,即語句printf(「%d」 ,p); – nobalG 2011-04-12 16:59:27