[英]Pointers in C — adding 1
我有一個關於指針的問題。 我開始理解這個概念,但是這段特定的代碼正威脅着這種理解,我只想清除它。
請注意“ B”行,即printf("ptr + %d = %d\\n",i, *ptr++); /*<--- 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;
}
更改為: printf("ptr + %d = %d\\n",i, *ptr++); /*<--- B*/
printf("ptr + %d = %d\\n",i, *ptr++); /*<--- B*/
為此: printf("ptr + %d = %d\\n",i, *(++ptr)); /*<--- B*/
printf("ptr + %d = %d\\n",i, *(++ptr)); /*<--- B*/
如果使用后綴版本的增量運算符,則表達式之前的值將返回增量之前對象的值。 前綴增量運算符(此答案中的第二組代碼使用)將通過引用返回增量對象。
* ptr ++將在printf之后遞增。 您應該使用*(++ p)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.