int a[3] [3] ={1,2,3,4,5,6,7,8,9}; int a[3][3]={{1,2,3},{4,5,6},{...

int a[3][4]={1,2,3,4,5,6,7,8,9}\uff1b\u5219a[1][3]=?\u8bb2\u89e3\u4e0b

3\u884c4\u5217\uff0c
\u7b2c1\u884c\u662f{1,2,3,4}\uff0c
\u7b2c2\u884c\u662f{5,6,7,8}\uff0c
\u7b2c3\u884c\u662f{9,0,0,0}\u3002
\u800ca[1][3]\u662f\u7b2c2\u884c4\u5217\u7684\u503c\uff0c\u5b83\u662f8\u3002

int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
\u8fd9\u662f\u4e00\u4e2a3*3\u7684\u4e8c\u7ef4\u6570\u7ec4. a[1]\u662fa[1][0]\u7684\u5730\u5740,\u5373\u7b2c\u4e8c\u884c\u9996\u5730\u5740. \u53ef\u4ee5\u8ba4\u4e3a\u662f\u5e38\u91cf\u6307\u9488.
\u7c7b\u578b\u76f8\u5f53\u4e8eint *\u578b.
q=a[1] \u7c7b\u578b\u5339\u914d. \u53ef\u4ee5\u8d4b\u503c.
\u800c&a[1] \u5e76\u4e0d\u662fint **\u578b, \u800c\u662f\u4e00\u4e2a\u6570\u7ec4\u6307\u9488, \u7c7b\u578b\u4e3aint (*)[3].
\u6240\u4ee5 int (*m)[3];
\u7136\u540em=&a[1];
\u8fd9\u6837\u8d4b\u503c\u624d\u662f\u6b63\u786e\u7684.

这个二维数组实际上是一个有3个元素的一维数组,其中数组的元素又是一个有3个元素的一维数组。
我们先按行优先重新排列一下:
int a[3][3]=
{
1,2,3,
4,5,6,
7,8,9
};
C和C++中的数组是从0开始编号的,
第1行:a[0][0],a[0][1],a[0][2]
第2行:a[1][0],a[2][1],a[1][2]
第3行:a[2][0],a[2][1],a[2][2]
再看你要取的值:a[1][3]在哪里呢?显然在a[1][2]之后,但该值已经超出了数组的界限(数组有3个元素),即下标溢出了,溢出到了哪里呢?因为C/C++中多维数组(存储方式)相当于连续的一维数组,因此,这里它的溢出位置恰好是a[2][0]所在的位置。

现在可以给你答案了:a[1][3]=7

7
a[3][3] 就是3行3列
a[1][3] 就是第2行第4列(因为数组下标是从0开始记的),但是数组里没有第4列,顺着往下数,就是第3行的第一列,就是7.

不知道,因为a[0][0]表示第一行第一列,a[0][1]表示第一行第二列
a[1][0]表示第二行第一列,而a[1] [3]表示第二行第四列,而这个数组是3行3列的,所以不知道a[1] [3]等于多少,没定义

赋值后,a的元素为
1,2,3,4,5,6,7,8,9
4,5,6,7,8,9

7,8,9

a[1] [3]=7

0列 1列 2列
0行 1 2 3
1行 4 5 6
2行 7 8 9

a[1] [3]=6

扩展阅读:int a 3 4 a中各元素 ... 若有定义inta 2 3 ... int a 3 b 4 ... 全局int a 3 3存在哪里 ... static int a 3 3 ... int a 2 3 0 ... int a 3 4 0 ... a 2 3 是什么意思 ... int a[10] ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网