C数组指针增量

时间:2018-02-18 05:33:08

标签: c arrays pointers indexing

有人向我解释这个节目。我有一个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

这是如何运作的?

1 个答案:

答案 0 :(得分:2)

好的,你的程序有些问题,但我会尽我所能......

首先,你的问题出在第ptr1 = (ptr+=sizeof(int))[-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现在指向&#34; egg&#34;因为它的实际分配是ptr = ptr[4]
  2. ptr1现在指向&#34; cat&#34;因为它已分配ptr1 = ptr[-2]
  3. 你应该阅读两件事:&#34;评估顺序&#34;还有&#34;指针算术&#34;

    希望这会有所帮助......