有人向我解释这个节目。我有一个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
这是如何运作的?
答案 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"
你可以看到
ptr
现在指向&#34; egg&#34;因为它的实际分配是ptr = ptr[4]
ptr1 = ptr[-2]
你应该阅读两件事:&#34;评估顺序&#34;还有&#34;指针算术&#34;
希望这会有所帮助......