C语言,定义中文二维数组问题?

char levelNames[5][10] = {"贵人"}; 为什么定义了二维数组,却赋值为一维数组内容?

阅读 4.1k
3 个回答

首先,在C语言里,所谓的数组,都是栈里的一段连续空间,不管几维数组,都可以看成和一维数组一样的结构,因为空间都是连续的。

我们都知道,int a[4],这个数组,在取值是可以使用 *,比如 a[2] 就是 *(a + 4)

那么,当我们定义一个二维数组,int b[2][3]a[1][2] 我们也可以写成 *(b + 1 * 3 + 2)

所以你的问题,其实是,当你定义了一个字符型的二维数组时,相当于定义一个“字符串”的一维数组,只是C语言里并没有字符串类型,通过字符数组来实现是一种常用的方式。

但是请注意这种方式定义和用指针定义有本质上的区别。

这个二维数组只是为它的第一个元素(第一个一维数组)赋值了,后续的元素没有赋值. 默认情况下会赋值为 0. 所以它的内存分布可以表示为:

     贵人\0 | 0 | 0 | 0 | 0
地址: 0     10  20  30  40

就和

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

是一样的,只为第一个一维数组赋值了,而题主中的第一个一维数组是一个字符数组,这里是一个整数数组.

因为你只赋值了一个元素,另一个元素没有赋值。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进