打印函数名,函数名前加n个*为什么结果相同?

原创 2015年11月17日 21:52:08
程序:
#include <stdio.h>
void func()
{
int i = 1;
}
int main()
{
printf("%p\n",main);
printf("%p\n",*main);
printf("%p\n",**main);
printf("%p\n",***main);
printf("%p\n",func);
printf("%p\n",*func);
printf("%p\n",**func);
printf("%p\n",***func);
return 0;
}
结果:
eagle@eagle-QJC4:~$ ./a.out 
4195652
4195652
4195652
4195652
4195638
4195638
4195638
4195638
以下答案来自http://blog.chinaunix.net/uid-10314004-id-2964074.html
C语言中的函数是一种function-to-pointer方式,即对于函数,要将其转化成指针类型的.
ptr是函数指针类型,则*ptr是该指针所指向的函数,而由于函数自身又转化成指针了,所以说*ptr又转化成了ptr这种函数指针类型,因此,前面无论有多少个*号,最后都是对这个函数的调用.

下面的答案来自   @fefe82 的回答 @fefe82
C11 draft n1570
6.3.2.1 Lvalues, arrays, and function designators
4 A function designator is an expression that has function type. Except when it is the
operand of the sizeof operator, the _Alignof operator, or the unary & operator, a
function designator with type ‘‘function returning type’’ is converted to an expression that
has type ‘‘pointer to function returning type’’
.

6.5.3.2 Address and indirection operators
The unary * operator denotes indirection. If the operand points to a function, the result is
a function designator; if it points to an object, the result is an lvalue designating the
object.
 If the operand has type ‘‘pointer to type’’, the result has type ‘‘type’’. If an
invalid value has been assigned to the pointer, the behavior of the unary * operator is
undefined.

function designator 会自动转换成 pointer to function, 加一个 * 之后变成 function designator ,然后又自动转换成 pointer to function,周而复始,无论你加多少 * ,最后拿到的还是一个 pointer to function 。

版权声明:本文为博主原创文章,欢迎转载,但请在醒目位置注明出处

【调试】打印函数栈,以及由函数指针输出函数名的方法

打印函数栈,以及由函数指针输出函数名的方法

实实在在说多态(C++篇 相同函数名 依据上下文 实现却不同)

1.   什么是多态... 1 2.   多态带来的好处... 1 3.   C++中实现多态的方式... 1 4.   细说用函数重载实现的多态... 2 5.   细说用模板函数实现的多态...

在php中的变量和函数名前加&符号的意思

在PHP中&符号即传的是变量的引用而不是拷贝,引用意味着用不同的名字访问同一个变量内容。这并不像 C 的指针,它们是符号表别名。注意在 PHP 中,变量名和变量内容是不一样的,因此同样的内容可以有不同...

php定义function时,函数名前加“&”符号是什么意思?

在PHP中&符号即传的是变量的引用而不是拷贝,引用意味着用不同的名字访问同一个变量内容。这并不像 C 的指针,它们是符号表别名。注意在 PHP 中,变量名和变量内容是不一样的,因此同样的内容可以有不同...
  • lzb2512
  • lzb2512
  • 2013年07月08日 17:31
  • 1282

在php中的变量和函数名前加&符号的意思

在PHP中&符号即传的是变量的引用而不是拷贝,引用意味着用不同的名字访问同一个变量内容。这并不像 C 的指针,它们是符号表别名。注意在 PHP 中,变量名和变量内容是不一样的,因此同样的内容可以有不同...

php function 定义时函数名前加&符号的意义

看了很多帖子,但是都不能理解,又去看了很多资料,终于名白了.记下备忘. 问题:php在声明函数时,函数名前面的&符号有什么用? 一直想不通.很多帖子说类似于变量的$a=&$b,但是$b在声明的时候前面...

关于函数名前加static的一些解释

遇到有函数名前有加static的函数,不太懂什么意思。上网查了一下,网上有两种说法.现复制整理了一下,有兴趣的可以看一下 说法一: 在函数的返回类型前加上关键字static,函数就被定义成...

C语言函数名全集下载

  • 2010年01月09日 23:37
  • 23KB
  • 下载

vim使用—移动到文件开始和结束位置和当前位置(gg,G)、快速定位到当前光标所在变量或函数的定义处(gd)、自动对齐C和C++程序(先gg再=再G)、自动补全变量名,函数名和字符串ctrl+n或ct

1、将光标移动到文件的开始位置或结束位置:           gg     将光标移动到文件的开始位置。               G      将光标移动到文件的最后一行。      ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:打印函数名,函数名前加n个*为什么结果相同?
举报原因:
原因补充:

(最多只允许输入30个字)