C函数

93 阅读1分钟

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;
}