(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]本回答被提问者采纳

(C语言)int num[ ][3] = {{1,2},3,4,5,6}; 为什么是对的?
对于 int num[ ][3] = {{1,2},3,4,5,6}, 由于有了{1,2},所以第一行已经明确了,而第二行则从 3开始,由于每行有3列,所以第二行可以确定为 3,4,5这三个元素,而第三行则只有6这一个元素。由于元素已经全部明确,所以即便没有指定num的行数,其实程序已经很明确第算出了它的行...

c语言int a[2][3]={{1,2,3,4,5,6}};和int a[2][3]={{1,2,3}};哪个定...
第二个正确 第一个如果写成{{1,2,3},{4,5,6}}就是对的了,不然给第一维赋值6个元素已经超出了数组容量3 第二个的内容其实是{{1,2,3},{0,0,0}},如果不显示赋值,数组的其他部分会自动初始化为0

C语言。在定义int m [ ][3]={1,2,3,4,5,6};后,m[1][0]的值是?本人
应该是4,数组M为[{1,2,3}, {4,5,6}],m[1][0]是第二行第一列的数值,每个大括号是一行

c语言 struct sk{ int x; int y; }s[3]={1,2,3,4,5,6}
s[3]是数组,每个数组元素都由两个变量x,y组成,所以整个数组是连续的六个内存单元,因此3这个数被存在第二个数组元素的x成员变量中。

C语言中 int a[3][3]={{1,2},{3,4},{5,6}}
int a[3][3]={{1,2},{3,4},{5,6}} 不就是定义了一个3*3的数组,然后对他进行初始化,可以对全部元素初始化,也可对部分元素初始化,没初始化的默认为0;第一行1,2,0 第二行3,4,0 第三行5,6,0 。。。这不是数组基础么。。。简单的说,就是定义了一个数组,并初始化了...

int a[2][3]={{1,2},{3,4},{5,6}};是正确的赋值吗
这里a[2][3]代表的是2行3列,而你赋值的时候是3行2列,就是说你的行数越界了,所以是不行的,行数只能小于等于2,列数只能小于等于3,希望你能理解

在c语言数组中int a[][3]={1,2,3,4,5};合法吗
int a[][3]={1,2,3,4,5};合法的实际中这个赋值等于a[0][3]={1.2.3}a[1][3]={4,5,0}这样系统会自动安排对应的位置

关于C语言的二维数组 int[][3]={1,2,3,4,5,6,7,8,9,10,11,12} printf...
int t[][3]={1,2,3,4,5,6,7,8,9,10,11,12},这个二维数组的每一行有3个数据,系统会自动判断需要4行才能存储这 12个数据,t[2][1]表示数组中的第3行的第2个数据(数组的下标从0开始的),即t[2][1]=8 所以printf("%d\/n",t[2][1]);所以打印的结果应该为8 ...

int d[3][]={{1,2},{1,2,3},{1,2,3,4}}为什么错的
C语言中数组在内存中的存储是连续的若干内存单元,当编译器确定分配多少内存单元的时候,它至少要知道二维数组的每行有多少个元素,因此我们可以声明int d[][3]={{1,2,3},{4,5,6},{7,8,9}},但是我们不能声明你提问的结构。这其实本质是如何理解C语言编译器对内存组织的问题。

请问int x[][3]={0}; int x[][3]={{1,2,3},{4,5,6}};如何理解其中的...
1. int x[2][3]={{1,2},{3,4},{5,6}} (1)这句的左边含义是:有一个二维数组,2行3列,一共就是6个int类型的数据。(2)这句的右边含义是:最里面的三个花括号,代表的是三行,每个花括号里有两个数据,代表的是每行有2列,所以代表的意思是:3行2列的一个int类型的二维数组...

相似回答