本人大一信安新手一枚,自学c的第n天,我也不知道写的东西有没有人看,凑合着吧,万一哪天变大佬了呢。。。。。
给大家说一下我今天看的课啊,是在b站上找到的一个老师的课,貌似不太出名,但是真的讲的超级好,推荐大家看看。BV1hz4y1979k这个是b站的视频号啊,新手可以看看
我认为这个视频分为三个部分,第一部分是指向函数的指针(比较简单)
1.第一个是形如int(*p)(int a,int b) 这个括号必须要的,如果没有括号的话,意思就变成了返回值为指针的函数!!!
来讲讲这玩意有什么用吧,我觉得这就是起到一个代替的作用,就是说你自己设定了一个函数,比如int max(int a,int b),作用就是找出两个数更大的那个东西,过程就是再写一个int(*p)(int a,int b)要和max那个一样,然后就是p=max(函数地址赋给p),切记不是p=max(a,b),这样写的意思是吧函数值付给了p,而不是将函数地址给p。这样以后,c=max(a,b)就等同于c=(*p)(a,b) 那这有什么用呢?个人觉得如果函数很多的话,就可以用p去等于某函数的函数名,这样可以节省时间。可能吧哈哈,或者看上去更简洁。(补上,后面查资料说,用函数名调用函数,只能调用所指定的一个函数,而通过指针变量调用函数就比较灵活,可以根据不同情况将函数地址赋给p,从而调用不同函数。) (个人觉得,也就那样哈哈) 图一是原始写法,图二是指向函数的指针写法,图三是运用的另一实例
希望我写的东西你们能看懂,虽然可能没人看。。。//2022.9.2
终于讲到第二部分啦
第二部分:用指向函数的指针做函数参数 (就是指针在函数的括号里)
指向函数的指针变量的一个重要用途是把函数的地址作为参数传递到其他函数。(可能会有点懵,我尽量讲清楚)
简单来说,就是现在有三个函数,都是你自己设定的,分别为f1,f2,fun 这三个函数对吧,假如说f1函数的作用是找出某两个值的最小值,f2是找出某两个数的最大值,fun函数是找出某俩数的偶数,那么你可以这么设定fun函数 void fun(int(* x1)(int a,int b) ,int (* x2)(int a,int b));
上个图吧,可能会好说明,但是和我举的函数的作用例子不太一样
这里的是函数的部分,其实在主函数中已经有把f1和f2函数赋给了*x1和*x2
这样一来(*x1)(i)就等同于f1(i) (*x2)(i,j)就等同于f2(i,j),有人觉得,你tm要fun函数调用f1和f2函数为什么不直接调用嘞???(我觉得可以装逼吧,看上去高级),查资料说如果每次fun函数调用的函数都不一样,用指针变量就方便多了,。嗯......随便了,我并不觉得方便哈,也许境界不够高吧哈哈。
讲个题目吧,有两个整数a和b,由用户输入1或2或3,如输入1,程序就给出a,b中的大者,输入2就输出小者,输入3就求a,b的之和
剩下的懒得拍了,大概就是这样,谁让我没有一个粉丝呢,等以后粉丝多了我手写代码
第三部分啦,返回指针值的函数(我觉得好难好难)
形如int* a(int a,int b); 注意啊,*没有括号!!!
算了,总结下吧 int (*p)(int a, int b)这叫做指向函数的指针
int *p(int a,int b)叫做返回指针值的函数
今天先到这吧,这里我也没看懂。我好菜//2022.9.2 11:32
// 晚上九点啦,我又来肝了。换课了,原来那个老师讲得实在晦涩难懂
第三部分:返回指针值的函数
这玩意就是说,用了这个函数,传回来的是一个地址,这就需要在主函数中有另外一个指针变量接收传回来的地址,在函数中需要另外设一个指针变量传回地址。
这里举个例子吧,输入长方形的长和宽,输出它的周长
#include <stdio.h>
int *per(int a,int b);
int main()
{
int chang;
int kuan;
int *iresult;
scanf("%d %d",&chang,&kuan) ;
iresult=per(chang,kuan);
printf("%d",*iresult);
}
int *per(int a ,int b)
{
int *p,perimeter;
p=&perimeter;
perimeter=2*(a+b);
return p;
}
这里是一个很简单的例子希望大家能理解。//9.2 21:38 有机会我再找找有没有好的例子