数组作为参数传递给函数

数组作为参数传递给函数

一维数组:

代码如下:
#include <stdio.h>
//函数遍历数组
void printArr(int arr[],int len)//形参中不存在数组的概念,即便括号中约定了数组的大小,也无效
//形参传递的是一个地址,数组的首地址
{
int i;

//printf("printArr:%d\n",sizeof(arr));//在64位操作系统中用8个字节表示一个地址

for(i=0;i<len;i++)
{
	printf("%d ",arr[i]);
}
putchar('\n');

}

int main()
{
int arr[]={1,2,3,3,4,5};
int len;

len=sizeof(arr)/sizeof(arr[0]);//数组长度

//printf("main:%d",sizeof(arr));

printArr(arr,len);//数组名代表整个数组的首地址
printArr(&arr[0],len);//数组第一个元素的地址也是数组的首地址


return 0;

}

注意:1、形参中不存在数组的概念,即便括号中约定了数组的大小,也无效
形参传递的是一个地址,数组的首地址,形参仅仅进行值传递
2、 printArr(arr,len);//数组名代表整个数组的首地址
3、 printArr(&arr[0],len);//数组第一个元素的地址也是数组的首地址
4、在64位操作系统中用8个字节表示一个地址

运行结果:
在这里插入图片描述

二维数组:

代码如下:
#include<stdio.h>
void initArr(int arr[][3],int row,int column)
{
int i;
int j;
for(i=0;i<row;i++)
{
for(j=0;j<column;j++)
{
printf(“请输入第%d行,第%d列的元素:”,i+1,j+1);
scanf(“%d”,&arr[i][j]);

	}
}
puts("输入完毕!");

}

void printArrDouble(int arr[][3],int row,int column)
{
int i;
int j;
for(i=0;i<row;i++)
{
for(j=0;j<column;j++)
{
printf("%d ",arr[i][j]);
}
putchar(‘\n’);
}
}

int findMaxOfArr(int arr[][3],int row,int column)
{
int i;
int j;
int Max=arr[0][0];//将第一个元素赋给Max,其他元素与第一个元素作比较
for(i=0;i<row;i++)
{
for(j=0;j<column;j++)
{
if(Max<arr[i][j])
{
Max=arr[i][j];
}
}

}
return Max;

}
int main()
{
int arr[2][3]={};
int max;

initArr(arr,2,3);

printArrDouble(arr,2,3);

max=findMaxOfArr(arr,2,3);
max=findMaxOfArr(&arr[0][0],2,3);//传递数组首地址也可

printf("二维数组中的最大数为:%d",max);

return 0;

}

运行结果如下:
在这里插入图片描述

注意:
1、二维数组中的每个元素是一个一维数组,在作为形参时必须将每个一维数组中有几个元素写进去,不然会出现报错,如正确写法:printArrDouble(int arr[][3]),而不能像一位数组那样写成printArrDouble(int arr[][]),因此arr[][3],前面的一个可以不用写,后面一个必须写

2、在进行实参传递时,也可像一维数组那样传递二维数组的首地址过去,如:调用时可以写成max=findMaxOfArr(arr,2,3),也可以写成:max=findMaxOfArr(&arr[0][0],2,3),反正传过去的是数组的首地址即可,如果学了指针,用指针也可以

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值