C语言 数组参数

基础

  1. C语言规定数组变量arr,本身就是地址(指向该数组第一个元素的类型的指针)
  2. &arr也是地址(指向整个数组的类型的指针)
  3. 所以数组参数就是指针参数
#pragma warning(disable:4996)
# include //引用函数库
# include 

void test(int a[]) {
	printf("%x\n", a);
}


void main() {
	int a[3] = { 0,1,2 };
	printf("%x\n", a);
	test(a);
	system("pause");
}

一维数组做为参数

  1. 数组作为函数参数,传递的是地址,函数的参数是数组,不会在内存中再产生局部变量。
# include //引用函数库
# include 
void show1(int a[9]){
	printf("%d\n",sizeof(a));//这里为什么是8,而不是4,地址的大小不应该是4个字节吗
	printf("%x\n",a);
	for (int i =0;i<9;i++){
		printf("%d",a[i]);
	}
}
void show2(int *p){
	printf("%d\n",sizeof(p));
	printf("%x\n",p);
	for (int i =0;i <9; i++){
		printf("%d",p[i]);
	}
}
void show3(int *p){
	for (int i =0;i <9; i++){
		printf("%d",*(p+i));
	}
}
void main(){
	int a[9]={1,2,3,4,5,6,7,8,9};
	printf("%d\n",sizeof(a));
	printf("%x\n",a);
	show1(a);
	printf("\n");
	show2(a);
	printf("\n");
	show3(a);
}
36
4e3276a0
8
4e3276a0
123456789
8
4e3276a0
123456789
123456789

二维数组作为参数

# include //引用函数库
# include 
void show1(int a[3][3]){
	printf("%d\n",sizeof(a));
	printf("%x\n",a);
	for (int i =0;i<3;i++){
		for (int j =0;j<3;j++){
			printf("%d",a[i][j]);
		}
	}
}
void show2(int (*p)[3]){
	printf("%d\n",sizeof(p));
	printf("%x\n",p);
	for (int i =0;i <3; i++){
		for (int j =0;j<3;j++){
			printf("%d",p[i][j]);
		}
	}
}
void main(){
	int a[3][3]={1,2,3,4,5,6,7,8,9};
	printf("%d\n",sizeof(a));
	printf("%x\n",a);
	show1(a);
	printf("\n");
	show2(a);
}

你可能感兴趣的:(c-c++)