【问题标题】:incementing in double pointer在双指针中加入
【发布时间】: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


【解决方案1】:

如果你改变这个

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;
}

到这里

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;
}

输出将是:100

printf("%d",*ptr); 更改为此 printf("%d",**ptr);

这个static int *p={x+2,x,x+3,x+4,x+1};这个
static int *p[]={x+2,x,x+3,x+4,x+1};

考虑使用GCC 编译您的C 代码并调用所有警告和调试信息:
gcc -Wall -Wextra -g 然后使用GDB 调试器

【讨论】:

  • @Sagarb 这是在回答你的问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-08
  • 2021-12-16
  • 2019-04-20
  • 1970-01-01
相关资源
最近更新 更多