(C语言)int num[ ][3] = {{1,2},3,4,5,6}; 为什么是对的?

如题所述

num是一个多维数组,每行有3个int型元素。由于多维数组的存储方式实际上也是类似于一维数组那样连续存放的,所以对于形如 {1,2,3,4,5,6,7,8,9}这种类型,其实与{{1,2,3}, {4,5,6}, {7,8,9}}这种形式的存放方式是完全一样的,这也是多维数组必须指定除第1个[]中的大小的原因,因为没有后面的大小,C语言是无法正确地区分这片连续内存究竟是几行几列。
而{{}, {}, {}}这种形式则是显示地指明了数组中的每行元素构成。
对于 int num[ ][3] = {{1,2},3,4,5,6}, 由于有了{1,2},所以第一行已经明确了,而第二行则从 3开始,由于每行有3列,所以第二行可以确定为 3,4,5这三个元素,而第三行则只有6这一个元素。由于元素已经全部明确,所以即便没有指定num的行数,其实程序已经很明确第算出了它的行数为3。

Ls说的 “系统自动设定int num[2][3]”是错误的,你自己可以验证。
#include <stdio.h>
int main()
{
int num[ ][3] = {{1,2},3,4,5,6};

for(int i = 0; i < 3; ++i)
for(int j = 0; j < 3; ++j)
printf("%d%d = %d\n", i, j, num[i][j]);

return 0;
}

输出:
00 = 1
01 = 2
02 = 0
10 = 3
11 = 4
12 = 5
20 = 6
21 = 0
22 = 0
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-05-16
int num[ ][3] = {{1,2},3,4,5,6};
赋值时会自动根据第二维的大小来确定第一位的数
这里一共6个数 而第二维定为3
所以系统自动设定为int num[2][3]本回答被提问者采纳