- 一维数组传参
要把数组或者指针传给函数,那函数参数如何设计?
上面各写法有问题嘛?
第一个没问题
第二个没问题
第三个没问题
第四个没问题
第五个解析:定义int*arr2[20]为20个int*类型的数组,test2之后用的是arr2,arr2是数组名就是首元素地址,首元素是int*类型的是int*类型的,所以二级指针就是用来存放一级指针变量的地址,所以没问题。
- &是地址所以可以传给指针
- Ptr是一级指针变量所以可以传给函数
- Arr是数组名数组名是首元素地址所以可以
*p指向的是arr{10}的首元素地址也就是1的地址,15行把元素个数算出来。16行p为指针所以函数也需要用指针来接收,
- 二级指针传参
n为10,再把n的地址放到*p里,再把p*放到二级指针变量**pp里。那么test(pp)里传到函数int**ptr也没问题。直接传test(&p)也可以因为函数里就是的二级指针就是存一级指针的。
- 函数指针
函数指针——指向函数的指针就是函数指针
数组指针——指向数组的指针就是数组指针
程序结果打印出来的函数地址,所以函数也有地址。
函数名和取函数是一样的都拿到的是函数的地址。
如何存函数的地址呢?以上程序为例
Int(*pf)(int,int)= &add;
(*Pf)是指针,指向函数()函数的参数有那些(int,int)函数的返回类型为int。
(int,int)里的x和y写不写都可以这时候*pf里就是函数的地址
Int ret = (*pf)(2,3);
如果要调用函数使用对pf进行解引用(*pf)是不是就可以拿到函数了那函数需要传的参数设置一下为(2,3),再使用int ret来接函数的返回值。此时打印ret应该为5.