gpt4 book ai didi

c - 二维数组的指针

转载 作者:行者123 更新时间:2023-11-30 18:17:41 24 4
gpt4 key购买 nike

这是来自 Microsoft 测试的问题:

 main()
{
int a[2][3]= { (1,2,3),(4,5,6)};
int (*ptr)[3] = &a[0];
printf("%d %d\n", (*ptr)[1],(*ptr)[2]);
ptr+=1;
printf("%d %d\n", (*ptr)[1],(*ptr)[2]);

}

给出的选项是:

  1. 段错误
  2. 编译器错误
  3. 总线错误
  4. 运行时错误

我运行了这段代码,但没有得到任何结果。我得到了以下答案:

6 0   
0 0

你能帮我理解发生了什么吗?

最佳答案

主要问题是这一行:

    int a[2][3]= { (1,2,3),(4,5,6)};

它使用括号而不是大括号。 (1,2,3) 的结果只是 3,(4,5,6) 的结果只是 6。所以这相当于:

    int a[2][3]= { 3,6 };

这又相当于

    int a[2][3] = { {3,6,0}, {0,0,0} };

这行代码使 ptr 指向 a[0]:

    int (*ptr)[3] = &a[0];

这一行

    printf("%d %d\n", (*ptr)[1],(*ptr)[2]);

则相当于

    printf("%d %d\n", (*&a[0])[1],(*&a[0])[2]);

可以简化为

    printf("%d %d\n", (a[0])[1],(a[0])[2]);

或者只是

    printf("%d %d\n", a[0][1],a[0][2]);

这一行

    ptr+=1;

使ptr指向a的下一个元素,因此相当于

    ptr=&a[1];

所以下一行简化为

    printf("%d %d\n", a[1][1],a[1][2]);

程序有效地打印了a[0][1]、a[0][2]、a[1][1]和a[1][2],所以这就是为什么你得到6,0,0, 0.

Charles Baley 指出 main() 缺少返回类型。这可能就是他们想要表达的意思。编译器通常至少会对此发出警告。

关于c - 二维数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12576591/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com