数组传参,指针作为参数

一、数组传参

1.一维数组作为参数(形参)

一维数组作为参数(形参)传参时——>可用一维数组来接收(实参)

void test(int[10])
{
	;
}
int main()
{
	int arr [10]= {0};
	test(arr);
	return 0;
}

一维数组作为参数(形参)传参时——>可用一级指针来接收(实参)

void test(int*p)
{
	;
}

int main()
{
	int arr [10]= {0};
	test(arr);
	return 0;
}

C 语言中,当一维数组作为函数参数(形参,实参)的时候,编译器总是把它解析成一个指向其首元 素首地址的指针。

2.二维数组

二维数组作为参数(形参)传参时——>可用二维数组接收(实参)

void test(int arr[][10])
{
	;
}

int main()
{
	int arr [10][10]= {0};
	test(arr);
	return 0;
}

接受时arr[][]第一个[]中可以忽略,但是第二个[]不能省略,因为二维数组可以不知道有多少行,但是一定得知道一行有多少个元素。

二维数组作为参数(形参)传参时——>可用数组指针接收(实参)


void test(int (*p)[10])
{
	;
}

int main()
{
	int arr [10][10]= {0};
	test(arr);
	return 0;
}

因为C 语言中,当一维数组作为函数参数的时候,编译器总是把它解析成一个指向其首元 素首地址的指针,所以arr[10][10]可以写作 int (*p)[10]

但这里需要注意的是:C 语言中,当一维数组作为函数参数(形参,实参)的时候,编译器总是把它解析 成一个指向其首元素首地址的指针。这条规则并不是递归的,也就是说只有一维数组才是 如此,当数组超过一维时,将第一维改写为指向数组首元素首地址的指针之后,后面的维 再也不可改写。比如:a[3][4][5]作为参数时可以被改写为(*p)[4][5]。

二、指针传参

1.一级指针传参(形参)

一级指针传参(形参)——>可以用一级指针接收(实参)

void test(int *p)
{
	;
}

int main()
{
	int *arr;
	test(arr);
	return 0;
}

指针p只是arr指针的临时拷贝(在栈上创建),所以test函数结束后就销毁了,如果要利用指针p则test函数必须要由返回值且类型为指针p的类型。然后在test函数最后加上return p;即可在利用函数返回值返回p的地址。

一级指针传参(形参)——>可以用二数组接收(实参)

void test(int arr[])
{
	;
}

int main()
{
	int *arr;
	test(arr);
	return 0;
}

同上C 语言中,当一维数组作为函数参数(形参,实参)的时候,编译器总是把它解析成一个指向其首元 素首地址的指针。

一级指针传参(形参)——>可以用二维指针接收(实参)传的时一级指针的地址

void test(int**p)
{
	*p= 2;
	return p;
}

int main()
{
	int *arr;
	test(&arr);
	return 0;
}

2.二级指针可以传参,用三级指针接收。(以此类推)但大部分情况下用来做实参接收一维数组,指针数组。

三、指针数组,数组指针传参

1.指针数组传参

指针数组传参(形参)——>可以用指针数组接收(实参),也可以用二级指针接收

void test(int *arr[])
{
	;
}

int main()
{
	int *arr[] = { 0 };
	test(arr);
	return 0;
}

指针数组传参(形参)——>可以用二级指针接收(实参)

void test(int **p)
{
	;
}

int main()
{
	int *arr[] = { 0 };
	test(arr);
	return 0;
}

同样C 语言中,当一维数组作为函数参数(形参,实参)的时候,编译器总是把它解析成一个指向其首元 素首地址的指针。

int*arr[]是指针数组做参数时编译器就解析为int*(*)arr。



2.数组指针传参

数组指针可做维二维数组传参时的实参。


总结:C 语言中,当一维数组作为函数参数(形参,实参)的时候,编译器总是把它解析 成一个指向其首元素首地址的指针。这条规则并不是递归的,也就是说只有一维数组才是 如此,当数组超过一维时,将第一维改写为指向数组首元素首地址的指针之后,后面的维 再也不可改写。比如:a[3][4][5]作为参数时可以被改写为(*p)[4][5]。




 
 

猜你喜欢

转载自blog.csdn.net/SoYangA/article/details/80633463