希望能用一个代码,看下区别把,看太多眼睛顾不过来
其实啊大部分我们代码里面,除了变量就是函数,又和指针结合起来,就云里雾里,但是只要把握一点,先判断这个是变量还是函数,基调定下来了,就好区分这个是啥,用来做什么用的了
我们区分是一个函数还是一个变量,用的就是看定义的名字后面有没有(){}这些
函数的定义不管有没有参数()和{}一般都是具备的,写完不用再加分号
但是变量的定义就不会有括号了,而且要结尾带上";"才可以
所以看下面的代码和注释,好好看下, 应该能知道差别了吧
动脑不如动手,指针函数和函数指针,真的非常建议,就算不安装vscode,随便找个在线网站,手打一次代码就明白了
#include <stdio.h>int max(int x, int y)//普通函数
{return x > y ? x : y;
}/*指针函数,区别变量和函数是看后面有没有(),*/
/*最后面带括号==》先判定是函数,然后看*pmax这个整体带不带括号,*/
/*不带括号,指明是一个函数,*只是用来表明返回数据类型是指针的作用*/
{
int *pmax()
{static int num = 10;return #
}//【函数指针】,看后面有括号还有参数,第一反应想要认为他是一个函数了,
//但是实际上,后面没有{}哦,反而来了一个分号作为结尾
//so?它是一个指针,只是用来给函数用的,指针里存放函数入口地址。
// 插一句,int *maxp代表这个是一个指针变量拉,存放普通变量的地址
int (*maxp)(int x, int y);int func1(int x,int y)
{return x + y;
}int func2(int x,int y)
{return x - y;
}int func3(int x, int *y)//这里就是指针变量作为参数传递了
{}int callback(int n, int (*p)(int))//这里就是把函数指针作为参数传递了
{return p(n);
}int main(void)
{/* p 是函数指针 */int num = 0;int *p = #printf("num= 0 address is : %p\n", (void *)p);p = pmax();//调用了指针函数,返回的是指针,所以必须要一个指针来接住这个函数的返回值。num = max(5,9);//调用了普通函数,返回的是普通数据printf("10 address is : %p\n", (void *)p);//打印p的地址哈printf("5 and 9 max number is: %d\n", num);//打印num经过max()函数运算后的数据maxp = func1;//这里就体现了maxp这个是一个存放函数地址的指针变量拉,因为后面又赋值func2了printf("2 + 4 is: %d\n", maxp(2,4));maxp = func2;printf("5 - 2 is: %d\n", maxp(5,2));return 0;
}
运行结果