【C语言篇】数组作为函数参数

一、一维数组作为函数参数

1.数组名当做函数实际参数,也是值传递,不过是传递的地址而已。

#include <stdio.h>

void printArr(int arry[],int len)//形参中不存在数组的概念,即便中括号约定了数组的大小,也无效
						  //传递的是一个地址,是数组的首地址
{							
	int i;
	printf("printArr:arry的大小是:%d\n",sizeof(arry));//在OS用8个字节来表示一个地址
	for(i=0;i<len;i++){
		printf("%d ",arry[i]);
	}
	putchar('\n');
}

int main()
{
	int len;
	int arry[5] = {1,2,3,4,5};
	len = sizeof(arry)/sizeof(arry[0]);
	printf("main:arry的大小是:%d\n",sizeof(arry));
	printArr(arry,len);//数组名代表整个数组的首地址
	printArr(&arry[0],len);//首元素地址也代表整个数组首地址
	return 0;
}

 2.变量的值传递&内存空间(地址)传递

#include <stdio.h>

void changeData(int data)//数值传递,操作的是不同的内存空间
{
	data = data + 100;
	printf("address:%p,dataInFunc = %d\n",&data,data);
}

int main()
{
	int data = 10;
	
	changeData(data);
	printf("address:%p,data = %d\n",&data,data);
	
	return 0;
}

#include <stdio.h>

void changeData(int data[])//操作的是相同的内存空间,数组名作为实参,到底传了什么?(地址)
{
	data[0] = data[0] + 100;
	printf("dataInFunc = %d\n",data[0]);
}

int main()
{
	int data[2] = {10,20};
	changeData(data);
	printf("data = %d\n",data[0]);
	
	return 0;
}

 

 3.编程案例:有两个班的同学,分别是10个人和5个人,分别求这两个班的平均分

#include <stdio.h>

//初始化数组
void initArry(int arry[],int len)
{
	int i;
	for(i=0;i<len;i++){
		printf("请输入第%d个学生的成绩:",i+1);
		scanf("%d",&arry[i]);
	}
	puts("done");
}
//打印数组
void printArry(int arry[],int len)
{
	int i;
	printf("总人数%d个\n",len);
	for(i=0;i<len;i++){
		printf("%d ",arry[i]);
	}
	puts("\ndone");
}
//计算平均分
float getAverage(int arry[],int len)
{
	int i;
	float aver = 0.0;
	int sum = 0;//总分变量一定要初始化为0,否则默认值是一个大数会影响结果
	for(i=0;i<len;i++){
		sum = sum + arry[i];
	}
	aver = (float)sum/len;
	return aver;
}

int main()
{
	int classOne[5];
	int classTwo[10];
	int lenOfClassOne = sizeof(classOne)/sizeof(classOne[0]);
	int lenOfClassTwo = sizeof(classTwo)/sizeof(classTwo[0]);
	float averOfClassOne;
	float averOfClassTwo;
	
	initArry(classOne,lenOfClassOne);
	initArry(classTwo,lenOfClassTwo);
	
	printArry(classOne,lenOfClassOne);
	printArry(classTwo,lenOfClassTwo);
	
	averOfClassOne = getAverage(classOne,lenOfClassOne);
	averOfClassTwo = getAverage(classTwo,lenOfClassTwo);
	
	printf("一班的平均成绩是%.2f\n",averOfClassOne);
	printf("二班的平均成绩是%.2f\n",averOfClassTwo);
	return 0;
}

二、 二维数组作为函数参数

1.形参怎么写?

合法写法:int arr[2][3]、int arr[ ][3];

不合法写法:int arr[ ][ ]

2.关心两点:(1)数组数据类型;(2)二维中的一维数组有多少个

3.编程示例

#include <stdio.h>

void printDoubleArry(int arry[][3])
{
	int i;
	int j;
	for(i=0;i<2;i++){
		for(j=0;j<3;j++){
			printf("%d  ",arry[i][j]);
		}
		putchar('\n');
	}
}

int main()
{
	int arry[2][3] = {{1,2,3},{11,22,33}};//特殊的一维数组,每个元素又是一个数组,大小确定
	printDoubleArry(arry);
	
	return 0;
}

 

4.编程案例:有3x4矩阵,初始化它并输出,然后求最大值并输出 

 

#include <stdio.h>

//初始化数组
void initDoubleArry(int arr[][4],int hang,int lie)
{
	int i;
	int j;
	for(i=0;i<hang;i++){
		for(j=0;j<lie;j++){
			printf("请输入第%d行,第%d列的数据:\n",i+1,j+1);
			scanf("%d",&arr[i][j]);
			}
	}
	puts("done");
}
//打印数组
void printDoubleArry(int arr[][4],int hang,int lie)
{
	int i;
	int j;
	for(i=0;i<hang;i++){
		for(j=0;j<lie;j++){
			printf("%d  ",arr[i][j]);
		}
		putchar('\n');
	}
}
//获取数组中元素最大值
int getMaxDataFromDoubleArry(int arr[][4],int hang,int lie)
{
	int i;
	int j;
	int max;
	
	max = arr[0][0];
	for(i=0;i<hang;i++){
		for(j=0;j<lie;j++){
			if(max < arr[i][j]){
				max = arr[i][j];
			}
		}
	}
	return max;
}

int main()
{
	int arr[3][4] ;//特殊的一维数组,每个元素又是一个数组,大小确定
	int max;
	
	initDoubleArry(arr,3,4);
	printDoubleArry(arr,3,4);
	max = getMaxDataFromDoubleArry(arr,3,4);
	
	printf("二维数组中最大的值是%d\n",max);
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿gao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值