
C语言 函数指针调用时加星号与不加星号都行是为什么?
4个回答
展开全部
定义,因为它是定义。不带“*”,就无法区分是指针还是变量。
&:叫做,取地址符。p1=&a;其实就是把a的地址取出来,赋给p1。
你可以这么理解,*P1才是和变量a同一个等级的东西。&相当于降级取地址,那p1去掉星号*也相当于取地址。通俗来说*p本身就是为了地址操作而存在的,比如地址的交换,传递之类的。
我纵观你正在学的知识点,悄悄告诉你一个规律。你是否发现在调用的时候一般是没有*号的。
比如swap(p1,p2);(这里是引用函数,不是定义函数)。
比如for中和scanf中的p++
再比如数组赋值:p=a(这里的a是数组首地址)
像printf和定义指针,一般是*p
请你细细理解,好好品味。
我只是心血来潮答个题。越学到后面你会发现指针很灵活。送我个赞,我得不到什么,但你肯定能得到很多。
&:叫做,取地址符。p1=&a;其实就是把a的地址取出来,赋给p1。
你可以这么理解,*P1才是和变量a同一个等级的东西。&相当于降级取地址,那p1去掉星号*也相当于取地址。通俗来说*p本身就是为了地址操作而存在的,比如地址的交换,传递之类的。
我纵观你正在学的知识点,悄悄告诉你一个规律。你是否发现在调用的时候一般是没有*号的。
比如swap(p1,p2);(这里是引用函数,不是定义函数)。
比如for中和scanf中的p++
再比如数组赋值:p=a(这里的a是数组首地址)
像printf和定义指针,一般是*p
请你细细理解,好好品味。
我只是心血来潮答个题。越学到后面你会发现指针很灵活。送我个赞,我得不到什么,但你肯定能得到很多。
展开全部
先上实例,再作分析
#include <stdio.h>
void myfun(void);
int main(void)
{
void (*pf)(void);
pf = myfun; /* 也可以这样赋值:pf = &myfun; 其道理同下*/
(*pf)();
pf();
return 0;
}
void myfun(void)
{
printf("hello world!\n");
}
第一种方法:因为pf指向myfun函数,*pf就是myfun函数,因此表达式(*pf)()与myfun()一样。
从myfun和pf的声明中就能看出myfun和(*pf)是等价的。
第二种方法:因为函数名是一个指针,可以互换地使用指针和函数名,因此pf()与myfun()一样。
从pf的赋值语句中就能看出pf和myfun是等价的。
这是c发展过程的历史原因,代表两帮人的不同观点而已!
但,最关键的一点,c标准把这二者作为等价形式全部接受!!!
#include <stdio.h>
void myfun(void);
int main(void)
{
void (*pf)(void);
pf = myfun; /* 也可以这样赋值:pf = &myfun; 其道理同下*/
(*pf)();
pf();
return 0;
}
void myfun(void)
{
printf("hello world!\n");
}
第一种方法:因为pf指向myfun函数,*pf就是myfun函数,因此表达式(*pf)()与myfun()一样。
从myfun和pf的声明中就能看出myfun和(*pf)是等价的。
第二种方法:因为函数名是一个指针,可以互换地使用指针和函数名,因此pf()与myfun()一样。
从pf的赋值语句中就能看出pf和myfun是等价的。
这是c发展过程的历史原因,代表两帮人的不同观点而已!
但,最关键的一点,c标准把这二者作为等价形式全部接受!!!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以使可以,但是意义不一样
加*时表示内存地址空间中的内容,不加*表示那个地址
举例说明
如定义一个指针*p
指向的内存地址为0001
0001中存放的数据为4
利用的时候,
p表示一个内存地址,也就是0001
而*p表示这个内存地址中存放得数据,也就是4
加*时表示内存地址空间中的内容,不加*表示那个地址
举例说明
如定义一个指针*p
指向的内存地址为0001
0001中存放的数据为4
利用的时候,
p表示一个内存地址,也就是0001
而*p表示这个内存地址中存放得数据,也就是4
追问
我也知道意义不一样,但是为什么可以这样做呢?
追答
地址是一个具体我忘记了什么类型的数据了,你可以用%d打印出来看看
是个数据,当然就可以用他了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
贴程序
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询