【发布时间】:2018-06-16 19:36:56
【问题描述】:
这是一个 C 代码:
#include <stdio.h>
void fun(char**);
int main() {
char*argv[] = {"ab","cd","ef","gh"};
fun(argv);
return 0;
}
void fun(char**p) {
char* t;
t = (p+=sizeof(int))[-1]; //negative index
printf("%s\n",t);
}
我执行了这段代码,得到的输出是“gh”。我的理解是,当
int* t = &a 其中 a 是一个数组,然后 t[-2] 将使 t 指向 *(t-2) 并且这应该是 t 当前值之前的某个位置。但这里的输出是 t 当前位置的下一个值。有人可以解释为什么会这样吗?
p+=sizeof(int) 应该让 p 指向 argv[2]。那么'gh'是如何输出的呢。
EDIT 给定 int 的大小为 2 个字节。这是一个模拟测试系列的问题。他们给出的答案是“gh”。我也在我的系统中运行了代码并得到了相同的答案。
【问题讨论】:
-
如今在大多数系统上,
int的大小是4。现在在纸上画出数组,并在该数组中的索引4上画一个箭头。该箭头是p += sizeof(int)创建的指针。现在获取之前的索引(即索引-1)。 -
p+=sizeof(int),WTF -
也许你应该检查一下
sizeof(int)在你的系统上到底是什么。虽然 2可能,但不太可能。 -
Given that the size of int 2 bytes..好吧,那是真的。然而,在大多数现代系统中,sizeof(int)的计算结果为4。 -
@SouravGhosh:我敢打赌 OP 正在使用 Turbo-C。