二维数组初始化及首地址

来源:互联网 发布:韦德2016季后赛数据 编辑:程序博客网 时间:2024/06/05 18:30
#include<stdio.h>#include<stdlib.h>void main4(){int num[3][4];//二维数组相当于 元素为一维数组的一维数组int number = 1;for (int i = 0; i < 12; i++){num[i / 4][i % 4] = number++;//赋值之后再自增printf("%d\n", num[i / 4][i % 4]);//3 * 4 = 12  则取num[3][4]第二个坐标为标准 }system("pause");}void main3(){//int num[3][4] = { 1 };//定义时直接初始化,则未初始化的自动初始化为0//num[3][4] = { { 1 }, { 5, 6 }, { 9 } };//未直接初始化则需要指定单个元素进行初始化//因为写明下标即指定了某个元素//错误的赋值方式//num[0][] = { 1, 2, 3, 4 };//int number[3][] = { 1, 2, 3 };//num[0][1] = 1;int num[3][4] = { { 1 }, { 5, 6 }, { 9 } };for (int i = 0; i < 12; i++){//因为二维数组相当于元素为一维数组的一维数组,printf("%d, %x\n", num[i / 4][i % 4], num + i);//所以num对应的是第一个一维数组(相当于第一个元素)的首地址,if (i % 4 == 3)//所以加1则相当于加一个元素(一维数组)大小,为4 * 4 = 16putchar('\n');}//1, e7fd24//0, e7fd34//0, e7fd44//0, e7fd54//5, e7fd64//6, e7fd74//0, e7fd84//0, e7fd94//9, e7fda4//0, e7fdb4//0, e7fdc4//0, e7fdd4printf("===============\n");for (int i = 0; i < 3; i++){for (int j = 0; j < 4; j++){printf("%d, %x\n", num[i][j], num[i] + j);//num[i]相当于第i + 1个一维数组,也是其第一个元素的地址(也是一维数组首地址)}//所以加 j 即其第j + 1个元素的首地址putchar('\n');//与 &num[i][j] 等价}//== == == == == == == =//1, e7fd24//0, e7fd28//0, e7fd2c//0, e7fd30//5, e7fd34//6, e7fd38//0, e7fd3c//0, e7fd40//9, e7fd44//0, e7fd48//0, e7fd4c//0, e7fd50//int number[2][] = { { 1 }, { 3 } };//列数不可以省略,行数可以省略//int number[][2] = { { 1 }, { 3 } };//等价于 number[2][2]//printf("%d\n", number[1][1]);system("pause");}