3158|0

547

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

关于C语言的extern作用于指针、数组 [复制链接]

    指针与数组的差别还是很大的,但一般情况数组会蜕变为指针使用,下面由卓跃教育为您介绍关于C语言的extern作用于指针、数组。

以下为测试环境:gcc4.3.2-1-1、GNU/LinuxDebian5.0

 

  1、extern与static

  extern对变量、函数声明;编译时可见,即告诉编译器:“老兄,虽然这个文件里,我没有定义,但在别处定义了,你得放过我”。而出于检查和使用的需要,没有定义是不能放行的。

  函数和变量都默认为extern的,在链接时所有文件可见;更甚的是默认为不加static和extern即为定义,这也就带来的extern显性声明的必然性。这将在后面详细分析。

   static,字面意思是静态限定符,用于三种场合可产生三种效果:

   a、作用于局部变量,在函数的生存期其值具有连续性,如何理解,通俗但不准确的表达:被初始化一次,以后每次调用该函数时继续上次的结果。 

   b、作用于全局变量,只在本文件作用,其相对的是extern。具体比较将在后面分析。

 

  c、作用于函数,仅供本文件其它函数调用,函数和变量都默认为extern。具有三个作用:1.隐藏全局可见性;2.保持变量内容的持久;3.默认初始化为0。

  2、extern全局变量
  现代编译器都按文件编译,编译时各个文件独立检查语法错误。各个全局变量互相透明,可见域在本文件内。于是即使多个文件有多个定义也不报错,只是链接的时候所有全局变量保存在一个符号表,进行符号的定位。因此,报错也发生在链接阶段。也就是说,可见性是在链接时扩展的,编译阶段局限于本文件。
  typeid;变量和函数默认是extern的,即所有文件可见。
  但是默认的不仅是声明,更是定义。C语言规定,标识符可以有多个声明,但必须有且仅有一次定义。声明为了让编译器知道有哪些符号,什么类型,以便后面遇到时已经具备一定判断的意识。因此,多个文件出现了默认的typeid;就是多重定义;如果本意是多个文件共用一个符号,这时需要用到extern显性指定为声明。

externtypeid;仅仅是声明,需要另外定义,且是别的文件里的定义。

   指针符号是地址的地址;

  数组符号,对应整个数组;如果作为一维数组变量名,则为其第一个单元的地址。
  1)数组仅仅是一个符号,作为参数时,由于形参压栈时,将数组首地址压进,即以一个空间来存放首地址,就蜕变成指针了;定义多维数组时也会被编译器解释成指针。

  否则,数组名是不占单独的空间的,在符号表中是一个符号,地址为数组首地址,内容为首个单元内容。
    2)定义指针时,分配一个空间(我们的体系为32位,4个字节),其内为指向的单元的地址。
       通过上文,您对C语言是否有了一定的了解。如果您还有任何C语言方面的疑问,可以登录www.51great.org,点击在线咨询与在线老师交流。您也可以拨打我们的全国免费咨询专线:0591-83713060进行咨询

此帖出自信息发布论坛
点赞 关注
个人签名嵌入式培训www.51great.org
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
艾睿电子& Silicon Labs 有奖直播 | 全新蓝牙信道探测:从技术创新到实际应用
直播时间:3月12日(周三)上午10:00
直播奖励:多功能榨汁机、蓝牙音箱、手机支架

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表