【发布时间】:2021-07-31 00:14:52
【问题描述】:
int main()
{
static int x[]={100,200,300,400,500};
static int *p={x+2,x,x+3,x+4,x+1};
int **ptr=p;
ptr++;
printf("%d",*ptr);
return 0;
}
谁能解释一下为什么输出500,最初ptr包含x+2,递增后应该包含x,输出应该是100,但是输出是500。我不知道为什么! 很多人关心 C 的警告和规范,问题是这是一个教科书问题,我需要找到输出,以及我是如何得到输出的 任何帮助表示赞赏!
【问题讨论】:
-
您没有收到
int **ptr=p;的警告吗?还是printf("%d",*ptr);? -
你也有这个代码的compilable version吗?
-
不,您的代码无法使用 GDB 在线编译器进行编译。它给出了几个错误。专注于第一个错误
main.c:14:30: warning: excess elements in scalar initializer static int* p = { x + 2, x, x + 3, x + 4, x + 1 }; -
这一行是错误的:
static int *p={x+2,x,x+3,x+4,x+1};,即使你的编译器碰巧接受它。看起来应该是一个数组。 -
> 问题是这是一个教科书问题,我需要找到输出,以及我如何得到输出任何帮助表示赞赏!我怀疑您的教科书建议您在这里查找错误。
标签: c pointers double-pointer