C语言 函数指针调用时加星号与不加星号都行是为什么?

如题所述

定义,因为它是定义。不带“*”,就无法区分是指针还是变量。
&:叫做,取地址符。p1=&a;其实就是把a的地址取出来,赋给p1。
你可以这么理解,*P1才是和变量a同一个等级的东西。&相当于降级取地址,那p1去掉星号*也相当于取地址。通俗来说*p本身就是为了地址操作而存在的,比如地址的交换,传递之类的。
我纵观你正在学的知识点,悄悄告诉你一个规律。你是否发现在调用的时候一般是没有*号的。
比如swap(p1,p2);(这里是引用函数,不是定义函数)。
比如for中和scanf中的p++
再比如数组赋值:p=a(这里的a是数组首地址)
像printf和定义指针,一般是*p
请你细细理解,好好品味。
我只是心血来潮答个题。越学到后面你会发现指针很灵活。送我个赞,我得不到什么,但你肯定能得到很多。
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-01-19
先上实例,再作分析

#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标准把这二者作为等价形式全部接受!!!本回答被提问者采纳
第2个回答  2012-04-19
可以使可以,但是意义不一样
加*时表示内存地址空间中的内容,不加*表示那个地址

举例说明
如定义一个指针*p
指向的内存地址为0001
0001中存放的数据为4

利用的时候,
p表示一个内存地址,也就是0001
而*p表示这个内存地址中存放得数据,也就是4追问

我也知道意义不一样,但是为什么可以这样做呢?

追答

地址是一个具体我忘记了什么类型的数据了,你可以用%d打印出来看看
是个数据,当然就可以用他了

第3个回答  2012-04-19
贴程序

C语言 函数指针调用时加星号与不加星号都行是为什么?
定义,因为它是定义。不带“*”,就无法区分是指针还是变量。&:叫做,取地址符。p1=&a;其实就是把a的地址取出来,赋给p1。你可以这么理解,*P1才是和变量a同一个等级的东西。&相当于降级取地址,那p1去掉星号*也相当于取地址。通俗来说*p本身就是为了地址操作而存在的,比如地址的交换,传递之...

C语言交换两个值的自定义函数,类型加个“星号”和不加有什么区别?就是...
加了星号说明是指针类型,是指这个指针变量可以访问该类型的数据,指针也是一种变量,只不过它储存的是地址。一般变量储存的是数据。通过指针可以间接访问数据,它显示C语言的灵活性,优越性。我也刚学,看了很久,觉得挺有用的

C语言指针什么时候要带*什么时候不带*?
严格说来,指针什么时候都不带*。int *p,那个*是int的,不是p的。但为了在int下声明不是指针的变量,规定在每个指针变量前加一个*,以便编译器识别,这就使好多人误以为*是指针变量的了。

c语言被调用函数名前加*代表什么
星号表示这个函数的返回值是一个指针,也就是一个地址。

C语言函数名后面括号里的指针变量为何有时带星号有时不带?
因为释放空间对地址进行操作,需要参数是个指针变量,函数对链表所在地址进行操作 而排序函数对链表进行操作,需要参数是链表的本身的变量类型,函数对链表本身进行操作

C语言中为什么要加星号!
在C语言中使用*号有两种情况。1 做乘法运算符使用。在计算机中一般不使用数学的乘号×,而是用更容易打出的*替代。如果*出现在运算中,且左右都有表达式,那么*就是当做乘号来使用的。比如 include <stdio.h>int main(){ printf("%d\\n", 3*4); return 0;}这个程序就是简单的计算3*4的...

关于Objective-c程序的方法名前为什么有的加星号有的不用加? 加*号代...
-(int)addOne;+(int)addTwo;从上面可以看出,*是用来表示返回值是指针类型的数据,比如NSString、NSArray、NSNumber等等。没有*的返回值类型通常都是简单类型,比如int、布尔等等 +表示该方法是类方法,不需要实例化该类就可以调用。-表示该方法是实例方法,必须要实例化后才能调用。

c语言自定义函数加星号是什么意思?
1.c语言在定义变量时加两个星号是表明这个变量为二级指针 2.c语言中在定义变量时使用 号是为了表明该变量为指针 3.指针有分一级指针,二级指针,三级指针等,有几个 号就相当于是几级指针

C语言后定义函数,前面在函数原型中为什么要加*?
传递参数为数组或者指针。形参都是以指针形式表示。你的例,第一个参数的实参为int型,第二个的实参可以是int数组名(第一元素地址)、int型指针(指针的值就是地址)、int值的地址(&x)int *是一个类型 就好比如char也是一个类型。double也是一个类型。int类型 int *类型这是两个类型 ...

c语言指针
c语言指针 最近学c语言指针,真是太混乱了,课后题不明白,求大神讲的通俗易懂些,例如编写一个函数,能同时求出三个整数的最大值和最小值,并通过形参把结果传回给调用函数。通过形参把结果传回... 最近学c语言指针,真是太混乱了,课后题不明白,求大神讲的通俗易懂些,例如编写一个函数,能同时求出三个整数的最...

相似回答