繁体   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