从零开始的c语言日记day38——数组参数,指针参数

  • 一维数组传参

要把数组或者指针传给函数,那函数参数如何设计?

从零开始的c语言日记day38——数组参数,指针参数_第1张图片

上面各写法有问题嘛?

第一个没问题

第二个没问题

第三个没问题

第四个没问题

第五个解析:定义int*arr2[20]为20个int*类型的数组,test2之后用的是arr2,arr2是数组名就是首元素地址,首元素是int*类型的是int*类型的,所以二级指针就是用来存放一级指针变量的地址,所以没问题。

从零开始的c语言日记day38——数组参数,指针参数_第2张图片

  1. &是地址所以可以传给指针
  2. Ptr是一级指针变量所以可以传给函数
  3. Arr是数组名数组名是首元素地址所以可以

从零开始的c语言日记day38——数组参数,指针参数_第3张图片

*p指向的是arr{10}的首元素地址也就是1的地址,15行把元素个数算出来。16行p为指针所以函数也需要用指针来接收,

  • 二级指针传参

从零开始的c语言日记day38——数组参数,指针参数_第4张图片

n为10,再把n的地址放到*p里,再把p*放到二级指针变量**pp里。那么test(pp)里传到函数int**ptr也没问题。直接传test(&p)也可以因为函数里就是的二级指针就是存一级指针的。

从零开始的c语言日记day38——数组参数,指针参数_第5张图片

  • 函数指针

函数指针——指向函数的指针就是函数指针

数组指针——指向数组的指针就是数组指针

从零开始的c语言日记day38——数组参数,指针参数_第6张图片

程序结果打印出来的函数地址,所以函数也有地址。

从零开始的c语言日记day38——数组参数,指针参数_第7张图片

函数名和取函数是一样的都拿到的是函数的地址。

如何存函数的地址呢?以上程序为例

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.

你可能感兴趣的:(c语言,开发语言,学习,监督学习)