【发布时间】:2018-07-28 15:53:57
【问题描述】:
有人解释一下这个程序。我有一个使用数组中的指针的 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
这是如何工作的?
【问题讨论】:
-
你对
ptr+=sizeof(int)有什么期望? -
您的系统上似乎
sizeof(int)是 4。 -
您的输出与您发布的代码不匹配。你的代码也是无意义的
-
使用在线编译器我的
ptr1 = *(ptr+=sizeof(int))指向egg,所以[-2] 从那里退后2 步得到cat。所以看起来你的系统和教程点在线编译器一样。 -
这个问题来自“Zoho corp”采访。所以我只是想了解这一点并知道它是如何工作的。
标签: c arrays pointers indexing