记录一些杂事(二维数组初始化、参数传递)

1. 向一个函数的参数传递二维数组的三种方法:

#include <stdio.h>

//
//	第一种传递方式(指针方式):int (*x)[20]
//		内部可以把x当成一个二维数组使用
//
void Fn1(int (*x)[20])
{
	for (int i=0; i<10; i++)
	{
		for (int j=0; j<20; j++)
		{
			printf("%d ", x[i][j]);
		}
		printf("\n");
	}
	
}

//
//	第二种传递方式(数组方式):int x[][20]
//		注意:形式参数的第一维允许为空
//
void Fn2(int x[][20])
{
	for (int i=0; i<10; i++)
	{
		for (int j=0; j<20; j++)
		{
			printf("%d ", x[i][j]);
		}
		printf("\n");
	}
}



//
//	第三种传递方式(单指针方式):int x[10][20]
//		内部x为当成一个一维数组使用,需要自己转换下标位置
//
void Fn3(int **x)
{
	for (int i=0; i<10; i++)
	{
		for (int j=0; j<20; j++)
		{
			printf("%d ", x[i*20+j]);
		}
		printf("\n");
	}
}


void main()
{
	//定义实参(实参就是实际的准备向函数中传递的实际变量)
	int xx[10][20];

	//给实参附上初值
	for (int i=0; i<10; i++)
	{
		for (int j=0; j<20; j++)
		{
			xx[i][j] = i+j;
		}
	}

	//调用1——直观简单
	Fn1(xx);

	printf("\n");

	//调用2——直观简单
	Fn2(xx);

	printf("\n");
	
	//调用3——需要强制类型转换
	Fn3((int **)xx);

}

2. 二维数组的初始化:

#include <stdio.h>



void main()
{
	//
	//	字符串1数组初始化
	//		欲取得xx1个数(即下面的每周7天),使用:sizeof(xx1)/sizeof(xx1[0]
	//
	char xx1[][10]=
			{
				"MON",	//!!注意不要忘记【逗号】,否则认为"MONTUE"为一个字符串,编译通过,无任何警告
				"TUE",
				"WED",
				"THU",
				"FRI",
				"SAT",
				"SUN",	//<---最后一个【逗号】,可有可无
			};

	//printf("%d\n", sizeof(xx1)/sizeof(xx1[0]));

	//
	//	字符串2指针数组初始化特殊——可以使用下面的方式
	//		注意:维数可以为空
	//
	char *xx2[]=
	{
			"MON",	//!!注意不要忘记【逗号】,否则认为"MONTUE"为一个字符串,编译通过,无任何警告
			"TUE",
			"WED",
			"THU",
			"FRI",
			"SAT",
			"SUN",	//<---最后一个【逗号】,可有可无
	};


	//
	//	其他类型(这里用整型)的二维数组初始化
	//
	int xx3[][3]=
	{
		{11, 22, 33},
		{10, 20, 30},
		{12, 22, 32},
		{15, 25, 35},
	};
	printf("%d\n", sizeof(xx3)/sizeof(xx3[0]));



	//
	//	但其他类型(这里用整型)的指针数组初始化错误!!
	//
	/*
	int *xx4[]=
	{
		{11, 22, 33},
		{10, 20, 30},
		{12, 22, 32},
		{15, 25, 35},
	};
	*/

	//
	// 但可以先“分开”定义,再使用分开定义的变量
	//
	int x1[] = {11, 22, 33};
	int x2[] = {15, 22, 33};
	int x3[] = {14, 22, 33};

	int *xx4[]=
	{
		x1, x2, x3,
	};

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值