数组作为参数传递给函数
一维数组:
代码如下:
#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),反正传过去的是数组的首地址即可,如果学了指针,用指针也可以