gpt4 book ai didi

C 数组指针递增

转载 作者:行者123 更新时间:2023-11-30 21:42:28 24 4
gpt4 key购买 nike

有人给我解释一下这个程序。我有一个在数组中使用指针的 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]

我试图提供一些调试信息以便更清楚地了解此事,

内存中映射的字符串

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

验证sizeof(int)是4

函数的开头

*ptr - 0x400624 - "ant"

分配给 ptr1

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

如你所见

  1. ptr 现在指向“egg”,因为对其的实际赋值是 ptr = ptr[4]
  2. ptr1 现在指向“cat”,因为它被分配了ptr1 = ptr[-2]

您应该阅读两件事:“C 求值顺序”和“指针算术”

希望这有帮助...

关于C 数组指针递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48848790/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com