[英]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"
如你看到的
ptr
现在指向“egg”,因为它的实际赋值是ptr = ptr[4]
ptr1 = ptr[-2]
您应该阅读两件事:“C 求值顺序”和“指针算术”
希望这可以帮助...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.