【C语言进阶】数组传参与指针传参

【C语言进阶】数组传参与指针传参


四、数组参数、指针参数

实参是数组名时,传递的是整个数组还是指针?

1 一维数组传参

传递一维数组名,可以通过哪些方式接收?

代码示例

#include<stdio.h>

//整型数组传参
void test(int arr[])//传递的是数组首元素的地址,不会拷贝一份数组
{
	printf("test\n");
}
void test1(int arr[10])//传递的是数组首元素的地址,不会拷贝一份数组
{
	printf("test1\n");
}
void test2(int* parr)//实参传递的是数组首元素的地址,形参用指针变量来接收
{
	printf("test2\n");
}
//整型指针数组传参
void test3(int* parr[])
{
	printf("test3\n");
}
void test4(int* parr[10])
{
	printf("test4\n");
}
void test5(int** pparr)//实参传递的是int*元素的地址,使用int**类型的指针变量来接收
{
	printf("test5\n");
}
int main()
{
	//一维数组传参

	int arr[10] = { 0 };//整型数组
	//整型数组的元素类型:int
	//整型数组元素的地址类型:int*

	int* arr1[20] = { 0 };//整型指针数组
	//整型指针数组的元素类型:int*
	//整型指针数组元素的地址类型:int**

	//arr表示数组首元素的地址
	test(arr);
	test1(arr);
	test2(arr);

	//arr1表示数组首元素的地址
	test3(arr1);
	test4(arr1);
	test5(arr1);//指针数组传参,可以用二级指针接收

	return 0;
}

解释说明

1 传递 int 型对象的地址,形参用 int 型指针变量来接收( int -> int* )

2 传递 int* 型对象的地址,形参用 int* 型指针变量来接收( int* -> int** )

3 指针数组进行传参,形参可以写成二级指针


2 二维数组传参

实参为二维数组名,形参用什么来接收?

代码示例

#include<stdio.h>

void test1(int arr[3][5])
{
	printf("test1()\n");
}
void test2(int arr[][5])//二维数组传参,可以省略行,但不能省略列
{
	printf("test2()\n");
}
void test3(int* arr[5])//数组指针,指向数组元素为一维数组的二维数组
{
	printf("test3()\n");
}
void test(int** arr)//一般用来接收一级指针变量的地址或二级指针变量
{
	;//不能用来接收二维数组传参
}
int main()
{
	//二维数组传参

	int arr[3][5] = { 0 };
	test1(arr);
	test2(arr);
	test3(arr);

	return 0;
}

解释说明

1 二维数组传参可以用数组指针来接收,但是不能用二级指针来接收


3 一级指针传参

3.1 示例1

代码示例

#include<stdio.h>

void print(int* p, int len)
{
	int i = 0;
	for (i = 0; i < len; i++)
	{
		printf("%d\n", *(p + i));
		//printf("%d\n", p[i]);//效果同上
	}
}
int main()
{
	//一级指针传参

	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	int* p = arr;

	print(p, sz);//将一级指针变量p传递给函数形参

	return 0;
}


3.2 形参为一级指针

函数形参为一级指针的时候,实参部分可以是什么?

1.变量的地址

2.一级指针变量

3.数组的数组名( 数组首元素的地址 )

注意:类型应保持一致。


4 二级指针传参

4.1 示例1

代码示例

#include<stdio.h>

void test(int** ptr)
{
	printf("num = %d\n", **ptr);
}
int main()
{
	//二级指针传参

	int num = 10;
	int* p = &num;
	int** pp = &p;

	test(&p);//一级指针变量的地址
	test(pp);//二级指针变量

	return 0;
}


4.2 形参为二级指针

函数形参为二级指针的时候,实参部分可以是什么?

1.一级指针变量的地址

2.二级指针变量

3.指针数组的数组名 ( 数组首元素的地址 )

注意:类型应保持一致。


总结:

  本节介绍了一维数组和二维数组传参时,形参可以用什么来接收;以及形参是分别是一级指针和二级指针时,实参部分可以是什么?


感谢您的阅读!如有任何错误,欢迎您的批评指正!

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值