有时看到如下的代码:

/*****************************/

#include

#include

#include

void test()

{

printf("123456\n");

}

int main(int argc, char *argv[])

{

printf("0x%x\n",test);

printf("0x%x\n",&test);

}

[root@localhost pht]# ./a.out

0x8048328

0x8048328

按照&运算符本来的意义,它要求其操作数是一个对象,但函数名不是对象(函数是一个对象),本来&test是非法的,但很久以前有些编译器已经允许这样做,

c/c++标准的制定者出于对象的概念已经有所发展的缘故,也承认了&test的合法性。

因此,对于test和&test你应该这样理解,test是函数的首地址,它的类型是void (),&test表示一个指向函数test这个对象的地址,

它的类型是void (*)(),因此test和&test所代表的地址值是一样的,但类型不一样。test是一个函数,&test表达式的值是一个指针!

跟此问题类似的还有对一个数组名取地址。

int a[100];

printf("%p\n", a);

printf("%p\n", &a[0]);

打印值一样。

但是数组名a,指向的是具有100个int类型的组数;

&a[0]指向的是元素a[0]。

即他们的值相同,但指向的类型不同。

标准在其rationale中解释了这个问题,摘录如下:

6.5.3.2 Address and indirection operators

Some implementations have not allowed the & operator to be applied to an array or a function.

(The construct was permitted in early versions of C, then later made optional.) The C89 Language

Committee endorsed the construct since it is unambiguous, and since data abstraction is

enhanced by allowing the important & operator to apply uniformly to any addressable entity.

C语言对函数取地址,C语言函数名以及取地址的区别和联系相关推荐

  1. Delphi 中取本机的计算机名、IP地址、Windows登录的用户名

    //作者:陆岛工作室 XOtec Studio //组件库:XOtecExpress. 几个在Delphi 中取本机的计算机名.IP地址.Windows登录的用户名的函数. uses Windows, ...

  2. c语言二维数组 ppt,C语言二维数组与指针.ppt

    C语言二维数组与指针.ppt 好好考,全国计算机等级考试 二级C语言,第12讲 二维数组与指针,二维数组的定义 数组元素的引用及初始化 二维数组和指针 二维数组名和指针数组作为实参 二维数组程序举例 ...

  3. c语言函数变量地址符,C语言中取地址符做函数形参?—— 引用的讨论

    取地址符&做函数形参? C语言强大且危险 引入 这个问题花去了整整一天的研究. 先看一段严蔚敏的<数据结构>中栈的例程: 这里面的&S第一遍看的时候想当然的认为是取了SqS ...

  4. c语言校验mac函数,C语言验证MAC地址字符串合法性函数

    C语言验证MAC地址字符串合法性函数 2019-01-06 C语言验证MAC地址字符串合法性函数,使用示例: char *mac_addr = "00:1d:08:c3:8a:00" ...

  5. c语言引用性间接变量,c语言取地址和间接引用

    #include int main() { int a=10; int b; b=a; //取地址 //地址符+变量名 &a; printf("%p\n",&a); ...

  6. c语言计算器取百分数,c语言计算器程序设计包含加减乘除简单的函数运算

    c语言计算器程序设计包含加减乘除简单的函数运算 c语言计算器程序设计包含加减乘除简单的函数运算 人气:258 ℃时间:2020-03-28 13:19:41 优质解答 实用计算器之程序设计 [摘 要] ...

  7. 对指针变量取地址_C语言指针简介(amp;和*运算符)

    取地址符(&) 和  取值符(*) (1)& 运算符 :用于取一个对象的地址 例如:int *p;    p = &c;    将c的地址赋值给指针变量p,我们称p为 &quo ...

  8. printf 指针地址_c语言入门 第十四章指针

    我们之前研究的数据类型, 语句, 函数等等,这些内容可以认为是编写程序的基础,除了c语言之外,在其他的编程语言当中也会有相似的内容 我们接下来要研究的指针,可以认为是c语言独有的特性,学会如何的使用指 ...

  9. 指向函数的指针 - C语言

    欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/1368947400.html 基本概念 ...

  10. C语言、嵌入式重点知识:回调函数

    前言 上文分享了一个专用的双链表的基本操作示例:双链表的操作示例(附代码) 这里提到了一个关键词:专用.与专用对应的词是通用. 我们从字面上可以很容易理解这两个词,专用就是针对特定情况的,特点就是很有 ...

最新文章

  1. SAP S/4HANA现金管理之变
  2. 信息系统项目管理师优秀论文:论信息系统范围管理02
  3. RabbitMQ六种队列模式-主题模式
  4. git如何选择性合并_小姐姐用 10 张动图,教会你 Git 命令使用
  5. 小白来学C语言之字符串与指针
  6. 安装openfst 和 threx的经过
  7. event.target
  8. 北京市昌平区卫星地图离线包下载
  9. 【程序】Xilinx FPGA将DDR3内存转换为W25Q256的SPI接口,供STM32单片机调用,产生容量为256MB的USB U盘设备
  10. 小白盒子无线打印服务器,玩转无线打印、共享打印机,蒲公英X1盒子和小白学习盒子谁更好...
  11. 高斯过程回归GPR-MATLAB语法解释
  12. 最小二乘法曲线拟合(MATLAB)
  13. Vue项目中完成谷歌统计和百度统计功能
  14. JS日期、年月日、时分秒
  15. ESP8266多任务处理---Ticker库
  16. 2021杭州阿里巴巴国际UED笔试题
  17. uniapp开发中ios底部出现安全距离问题怎么解决?
  18. 神威 计算机 应用,Gromacs在神威蓝光超级计算机上的部署和应用(2)
  19. 服务器装系统进pe界面就死机了,电脑可以进入PE系统,但重装就是重启,装不了系统是什么原因?...
  20. 关于 在国产麒麟系统上使用QProcess配合管道命令执行shell命令获取预期结果输出失败 的解决方法

热门文章

  1. 大锅乱炖10大H5前端框架
  2. java中读取mp3_Java读取Mp3
  3. 阅读笑话及搞笑图片的app
  4. C# JSON字符串转JSON对象
  5. Rejecting re-init on previously-failed class java.lang.Class<androidx.core.view.ViewCompat$2>
  6. “人工特征工程+线性模型”的尽头
  7. 牛客网面经题题目及答案总结-操作系统篇
  8. Android RecyclerView曝光采集
  9. 充电宝无线和有线哪个好?无线的充电宝好吗
  10. mysql 连续日期统计_MYSQL -- 计算连续日期天数