1.函数中的数组传参问题
形参中不存在数组的概念,即使中括号约定了数组的大小
传递的是一个地址,是数组的首地址
&arry[0]第一个元素的地址也是数组的首地址;数组名代表整个数组的首地址
该函数中的数组参数固定了数组的大小,但实际结果中并无法用到
void printdata(int data[10]){
for(int i=0; i<10; i++){
printf("%d ",data[i]);
}
printf("\n");
}
void printArr(int arry[],int len){
for(int i=0; i<len; i++){
printf("%d ",arry[i]);
}
printf("\n");
}
int main(){
int data[10]={1,2,3,4,5,10,5,6,7,2};
int len;
len=sizeof(data)/sizeof(data[0]);
printArr(data,len);
printdata(data);
}
函数中的数组参数是arry还是arry[]??
显然,应该是arry[],如果是arry,则证明是整型变量
还有注意一点,数组作为参数调用函数时,只写数组名即可,data[4]或者data[]是错误的
数组名视为首地址当作函数的实际参数
2.初始化并打印一个数组
#include <stdio.h>
void initArr(int arr[],int size){
for(int i=0;i<size;i++){
printf("请输入第%d个元素:\n",i+1);
scanf("%d",&arr[i]);
}
}
void printArr(int arr[],int size){
for(int i=0;i<size;i++){
printf("%d ",arr[i]);
}
}
int main(){
int arr[5];
int size=sizeof(arr)/sizeof(arr[0]);
initArr(arr,size);
printArr(arr,size);
return 0;
}
3.利用指针进行函数中的数组传参问题
核心:arr[]→*arr;
地址用指针变量来承接;parr是指针,*parr是变量值,parr++是指针偏移
initArr(arr,size);//实际参数是数组的首地址:数组名、数组首个元素的地址
或者是initArr(&arr[0],size);*
#include <stdio.h>
void initArr(int *parr,int size){
for(int i=0;i<size;i++){
printf("请输入第%d个元素:\n",i+1);
scanf("%d",parr);
parr++;
}
}
void printArr(int *parr,int size){
for(int i=0;i<size;i++){
printf("%d ",*parr);
parr++;
}
}
int main(){
int arr[5];
int size=sizeof(arr)/sizeof(arr[0]);
initArr(arr,size);//实际参数是数组的首地址:数组名、数组首个元素的地址
printArr(arr,size);
return 0;
}