二维数组初始化及首地址

#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");
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值