【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 = #
int** pp = &p;
test(&p);//一级指针变量的地址
test(pp);//二级指针变量
return 0;
}
4.2 形参为二级指针
函数形参为二级指针的时候,实参部分可以是什么?
1.一级指针变量的地址
2.二级指针变量
3.指针数组的数组名 ( 数组首元素的地址 )
注意:类型应保持一致。
总结:
本节介绍了一维数组和二维数组传参时,形参可以用什么来接收;以及形参是分别是一级指针和二级指针时,实参部分可以是什么?
感谢您的阅读!如有任何错误,欢迎您的批评指正!