我有一個關於指針的問題。我開始理解這個概念,但是這段代碼威脅到了這種理解,我只是想澄清它。C中的指針 - 添加1
請注意行「B」,這是printf("ptr + %d = %d\n",i, *ptr++); /*<--- B*/
我認爲,由於*ptr
被初始化爲&my_array[0]
的印象,然後*ptr++
(這將轉化爲「無論是存儲在ptr
地址,添加一個「)將打印出23,這是my_array[1]
的值。
然而,它打印出的值爲my_array[0]
,即1
。
我很困惑++
是否增加到地址本身(例如,1004變爲1005),並且由於整數佔用了大約4個字節的空間,所以它將落入my_array[0]
的範圍內(因爲該值1,將佔用地址1001,1002,1003,1004,自my_array[0]
在1001開始了,只上升到1002,然後*ptr++
仍然會打印出my_array[0]
,這是1
)...
或。 ..
是否*ptr++
從my_array[0]
(這只是*ptr
)改爲my_array[1]
*ptr++
,這正是我原先的想法。
基本上,請詳細說明*ptr++
對此程序的作用。請給我解釋一下,好像我五歲。
我真的很感激它,下面的代碼:
#include <stdio.h>
int my_array[] = { 1, 23, 17, 4, -5, 100 };
int *ptr;
int main(void)
{
int i;
ptr = &my_array[0]; /* point our pointer to the first
element of the array */
printf("\n\n");
for (i = 0; i < 6; i++)
{
printf("my_array[%d] = %d ", i, my_array[i]); /*<-- A */
printf("ptr + %d = %d\n", i, *ptr++); /*<--- B*/
}
return 0;
}
+1正確描述了postfix的實際工作方式。令人驚訝的是,有多少人認爲增量是在*聲明之後發生的,而不是你如何描述它,返回先前的價值。這是使用C++等語言實現代價最高的原因之一,因爲必須創建狀態的臨時副本。 – WhozCraig 2013-04-21 23:54:19
因此,在printf之後* ptr ++遞增,而在printf之前遞增*(++ ptr)會打印出修改後的值。 – user2044189 2013-04-22 00:05:45
而* ++ ptr與*(++ ptr)相同。謝謝! – user2044189 2013-04-22 00:07:17