数组作为函数参数
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
//int whitchmax(int a,int b);
//形参的数组大小无所谓 不重要 只是将实参的首地址传给了形参 反正会把下标传过来的 形参数组的大小其实无所谓了
void changevalue(int ba[1]){ //ba[0]~ba[4]
ba[3] = 27;
ba[4] = 45;
return;
}
int main(int argc, char *argv[]) {
//数组作为函数参数:
//数组元素作为函数参数
// int a[10];//相当于定义了10个变量 a[0] ~ a[9] 那么数组元素大家就可以当成变量使用
// a[1] = 5; //数组元素 当整形变量一样使用
// a[4] = 7;
// int max = whitchmax(a[1],a[4]);
// printf("%d\n",max);
//数组名作为函数参数
//实参 形参个数要相等 类型要一致 一一传递
//C语言规定 实参变量对形参变量的数据传递时'值传递'也就是单项传递 只由实参传递给形参
//数组名也可以作为函数实参 数组名代表的是数组的首地址 将数组名作为函数的实参传递时 传递的是数组的首地址
//此时 形参也应该用数组名(也可以是数组指针);
//强调:数组名作为函数参数时 不是值传递了 不是单项传递了 而是把实参数组的 开始地址传递给了形参数组
//这样两个数组就会就会共同占用一段内存 这其实叫地址传递 也就是说形参数组中 各个元素的值如果法发生了变化
//会导致实参元素的值也会发生变化 这一点 是与变量函数参数明显不同
int b[5];
b[0] = 85;
b[1] = 70;
b[2] = 98;
b[3] = 92;
b[4] = 78;
changevalue(b);
int i;
for(i=0;i<5;i++){
printf("b[%d] = %d\n",i,b[i]);
}
//1:如果实参为数组名 形参也得为数组名
//2:形参数组和实参数组类型要一致 比如都是int型
//3:形参大小可以不指定,即便是指定了也可以与实参数组大小不一致
//因为C编译器对形参数组大小不做检查
//只是将实参素数组的首地址传递给形参数组
//多维数组名作为函数参数
//可以用多维数组名作为形参和实参 可以指定每一维的大小 也可以忽略第一维的大小 但不能省略第二维的大小
//形参尽量跟实参一样 (也是这些行 这些列) 这样实参能引用的下标形参就可以 就会保证你不出错
//传递地址的概念很重要 这么一个概念理解数组作为函数实参 就很简单
//演示
int c[5][8]; //一维是0-4 二维0-7
c[0][2] = 12;
}
//int whitchmax(int a,int b){
// if(a>b){
// return a;
// }else{
// return b;
// }
//}