#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 = 16
putchar('\n');
}
//1, e7fd24
//0, e7fd34
//0, e7fd44
//0, e7fd54
//5, e7fd64
//6, e7fd74
//0, e7fd84
//0, e7fd94
//9, e7fda4
//0, e7fdb4
//0, e7fdc4
//0, e7fdd4
printf("===============\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");
}
二维数组初始化及首地址
最新推荐文章于 2022-10-30 16:25:39 发布