1. 程式人生 > >二維陣列初始化及首地址

二維陣列初始化及首地址

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