int [9]和[3] [3]之间的差异

Bul*_* M. 0 c arrays multidimensional-array

有什么区别

#include <stdio.h>

int a[9]; 

int
main()
{
    printf("%d\n", a[1]);
}
Run Code Online (Sandbox Code Playgroud)

#include <stdio.h>

int a[3][3]; 

int
main()
{
  printf("%d\n", a[1]);
}
Run Code Online (Sandbox Code Playgroud)

我认为两者都会在.bss段中放置相同的36字节内存缓冲区,有什么区别?或者a[3][3]语法糖结束了a[9] - a[3*3]吗?

Sou*_*osh 6

不,他们一样,他们代表不同的类型.参考你的代码,

  • 在第一种情况下,a是一维数组.因此,a[1]是类型int.

    §)要打印该值,没问题%d.

  • 然而,在第二种情况下,a是二维阵列.因此,a[1]是类型int [3].

    §)作为函数参数传递时,它会衰减到指向第一个元素的指针,基本上是一个int *.您将需要%p打印它(void *根据%p格式说明符的要求将指针强制转换).

但是,如果您对这两个变量的内存布局感到困扰,可以通过AnT另一个详细了解多维数组内存布局的方法来检查其他答案.