您的位置:首页 > 其它

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

2012-06-03 21:09 302 查看
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,
};

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: