- 数组参数、指针参数
- 一维数组传参
- 指针数组传参
- 二维数组传参
- 一级指针传参
- 二级指针传参
在写代码的时候,难免要把数组或者指针传给函数,那函数的参数该如何设计?
一维数组传参以下三种方式都可以:
void test1(int arr[]) { printf("test1--okn"); } void test2(int arr[10]) //避免这种写法,数字没有意义 { printf("test2--okn"); } void test3(int *arr) { printf("test3--okn"); } void main() { int arr[10] = { 0 }; test1(arr); test2(arr); test3(arr); }指针数组传参
以下两种方式都可以:
void test1(int *arr[]) { printf("test1--okn"); } void test2(int **arr) //传入首元素的地址 { printf("test2--okn"); } void main() { int *arr[10] = { 0 }; //首元素是整型指针 test1(arr); test2(arr); //传入数组名-->传入首元素地址 }二维数组传参
有以下几种方式:
void test1(int arr[3][5]) { printf("test1--okn"); } void test2(int arr[][5]) { printf("test2--okn"); } //总结:二维数组传参,函数形参的设计只能省略第一个[]的数字。 //因为对一个二维数组,可以不知道有多少行,但是必须知道一行多少元素。 //这样才方便运算。 void test3(int(*arr)[5]) //数组地址用数组指针接收 { printf("test3--okn"); } void test4(int** arr) { printf("test4--okn"); } int main() { int arr[3][5] = { 0 }; //首元素是有5个元素的一维数组 test1(arr); //传入首元素地址 test2(arr); test3(arr); test4(arr); }一级指针传参
当一个函数的参数为一级指针的时候,函数能接收什么参数?
变量地址
一维数组数组名
代码示例:
//打印一维数组各元素 void print_arr(int* p, int sz) { for (int i = 0; i < sz; i ++) { printf("%d ", *(p + i)); } } //打印一个整数 void print_int(int* p) { printf("%dn", *p); } void main() { int a = 10; print_int(&a); //接收变量地址 int arr[] = { 1,2,3,4,5,6 }; int sz = sizeof(arr) / sizeof(arr[0]); print_arr(arr, sz); //接收一维数组名 }二级指针传参
当函数的参数为二级指针的时候,可以接收什么参数呢?
一级指针的地址
二维数组数组名(但往往是使用数组指针作为函数参数来接收)
指针数组的数组名
void test(char** p) { } void main() { char c = 'b'; char* pc = &c; char** ppc = &pc; char* arr[10]; //指针数组,数组的首元素是指针,数组名是首元素的地址 test(&pc); test(ppc); test(arr); }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)