关于c:数组与指针二

9次阅读

共计 991 个字符,预计需要花费 3 分钟才能阅读完成。

数组和指针传参

一维数组传参

int arr[10] = {0};
test(arr);     // 实参传递的是数组的首元素首地址
// 形参写成数组的模式    
void test(int brr1[10])   // 办法一
void test(int brr1[])     // 办法二,形参局部能够省略数组大小。void test(int brr1[100])  // 办法三,也能够将数组大小写得很大,然而不倡议
// 形参的 [] 中的数字并没有意义
//int brr1[],变量 brr1 就是 int* 类型,理论形参还是个指针,跟上面的指针形参是一样的。// 形参写成指针的模式
void test(int *p1);

指针数组传参

int* arr2[10] = {0};
test2(arr2);  //arr2 是二重指针类型 int**。void test2(int* brr2[10]);
void test2(int* brr2[]);
void test2(int** p2);  // 形参为二重指针

二维数组传参

int arr3[3][5] = {0};
test3(arr3);   //arr3 是 int(*)[5]类型,即一维数组指针类型, 传递的是第一行数组的地址
void test3(int brr3[3][5]);
void test3(int brr3[][5]); // 行能够不写,然而列必须写对。void test3(int (*p3)[5]);  // 留神这个 [] 的 5 必须写
// 形参为指针模式时,类型也要为数组指针类型 int(*)[5]

test3(&arr);  // 传递的是整个二维数组的地址,int(*)[3][5]类型,即二维数组指针类型。void test3(int(*p)[3][5]);

一重指针传参

int arr4[10] = {1,2,3,4,5,6,7,8,9,10};
int* p4 = arr;   //p4 指向 数组首元素 1 的地址。test(p4);
void test(int* ptr);  // 形参为指针模式,传递一重指针。int arr4[10] = {1,2,3,4,5,6,7,8,9,10};
int* p4 = arr;   //p4 指向 数组首元素 1 的地址。test(p4);
void test(int* ptr);  // 形参为指针模式,传递一重指针。

二重指针传参

int a = 10;
int* pa = &a;
int** ppa = &pa;
test5(ppa);    // 实参为二重指针
void test5(int** ptr);  // 形参也要为二重指针
正文完
 0