
一维数组的传参: 当传入的数组名看成是一个数组时,可以直接用一个数组去接收,数组的大小可以不写; 当传入的数组看成是元素的首地址的时候,那么便可以用一个指针去接收 int* p (*代表是一个指针的符号,p是传入的地址)
指针数组(int* arr[])一个存放指针的数组,存放的也就是一些地址,前面的类型是地址变量指向的类型: 传参 同样如果传入的数组被看做数组名可以直接用一个指针数组去接受(int* arr[])大小可以不写(但最好写)如果是元素的首地址,那么便需要用一个二级指针去接收,因为传入的地址是指针的地址(int**arr)
二维数组的传参:跟一维数组一样,接收的时候可以用二维数组接收,接收时最好定义一下大小,二维数组当成首地址传入时,传入的就是一个一维数组的首地址,那么便要用一个数组指针去接收
(int (*p)[n]) 先定义一个指针,该指针指向的是一维数组的每个元素,每个元素是int型的
一级指针可以接收的: 变量的地址,一位数组的数组名
二级指针可以接收的: 一级指针的地址,二维数组的数组名,二级指针
函数指针:指向函数的指针,跟定义数组指针一样先定义一个指针然后再看他后面指向的内容,每个内容的类型是什么
#define _CRT_SECURE_NO_WARNINGS #include一维数组传参的接收方式 int arr[10] = {0}; test(arr); 传入数组 void test(int arr[]) void test(int arr[10]) 传入的是一个数组,那么我便用一个数组去接受(里面有无大小是另外的关系) void test(int* arr)// 传入的是首元素的地址,该元素的类型为int 所以用一个int的指针接收它 int* arr2[10] = { 0 }; //指针数组 ,每个数组元素存放的是一个指针 test(arr2) 传入数组 void test(int* arr[10]) void test(int* arr[]) void test(int* *arr) // 传入首元素的地址,首元素的类型为指针,所以用一个指针接收它 传入什么就用什么去接收,可以不考虑大小,如果传入的看做是首元素的大小那么就用一个指针去接收它 定义一个指针就是加个* void test(int* p, int x) { for (int i = 0; i < x; i++) { printf("%d", *(p + i)); // 将地址解引用打印出来 } } int main(){ int arr[10] = { 1,2,3,4,5,3,1,63 }; // 可以定义一个指针传入,也可以直接将数组名传入,数组名为首元素的地址 int sz = sizeof(arr) / sizeof(arr[0]); test(arr, sz); } 二维数组传参 int arr[3][5]={0}; test(arr); 传入参数 void test(int arr[3][5]) 传入一个二维数组,那么我变用一个二维数组去接收(大小可以不用写) void test(int* arr) 错误 如果看做地址 我 void add(int x,int y){ return x+y; } int main(){ int a=0; int b=0; int (*P)(int,int)=add; (p)(2,3) //利用指针函数调用函数时 有*无*都是一样的 }
int (*p)(int x,int y)=arr; 这里不存在首地址 &arr和arr 一样的
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)