簡體   English   中英

C數組指針遞增

[英]C array pointer increment

有人向我解釋這個程序。 我有一個 C 代碼,它使用數組中的指針。 對於以下程序

 #include<stdio.h>
    void function(char**);
    void main()
    {
        char *arr[] = {"ant","bat","cat","dog","egg","fly"};
        function(arr);
    }
    void function(char **ptr)
    {
        char *ptr1;
        ptr1 = (ptr+=sizeof(int))[-2];
        printf("%s\n",ptr1); 
    }

使用索引 -2 時,我得到的輸出為cat 從右上角開始,索引值從 1 開始。這是如何發生的。 索引值如何以這種方式運行,而不是從左側開始從 0 開始其索引位置。 我希望以下值在數組中

index value
0   ant
1   bat
2   cat
3   dog
4   egg
5   fly

但輸出是什么

index value
-4  ant
-3  bat
-2  cat
-1  dog
0   egg
1   fly

這是如何運作的?

好的,你的程序有一些問題,但我會盡力...

首先,你的問題在於第ptr1 = (ptr+=sizeof(int))[-2]; 我不明白你期望它會做什么,但它實際做的是ptr = ptr[4]; ptr1 = ptr[-2] ptr = ptr[4]; ptr1 = ptr[-2]

我試圖發布一些調試信息以更清楚地了解此事,

映射到內存中的字符串

0x400624 ant
0x400628 bat
0x40062c cat
0x400630 dog
0x400634 egg
0x400638 fly

驗證sizeof(int)是 4

function開始時

*ptr - 0x400624 - "ant"

在你分配到ptr1

*ptr - 0x400634 - "egg"
ptr1 = 0x40062c - "cat"

如你看到的

  1. ptr現在指向“egg”,因為它的實際賦值是ptr = ptr[4]
  2. ptr1 現在指向“cat”,因為它被分配了ptr1 = ptr[-2]

您應該閱讀兩件事:“C 求值順序”和“指針算術”

希望這可以幫助...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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