簡體   English   中英

C中的指針-加1

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM