什么是定义?什么是声明?它们有何区别?
举个例子:
A)int i;
B)extern int i; (关于 extern,后面解释)
哪个是定义?哪个是声明?或者都是定义或者都是声明?我所教过的学生几乎没有一
人能回答上这个问题。这个十分重要的概念在大学里从来没有被提起过!
什么是定义:所谓的定义就是(编译器)创建一个对象,为这个对象分配一块内存并给它
取上一个名字,这个名字就是我们经常所说的变量名或对象名。但注意,这个名字一旦和
这块内存匹配起来(可以想象是这个名字嫁给了这块空间,没有要彩礼啊。 ^_^),它们就同
生共死,终生不离不弃。并且这块内存的位置也不能被改变。一个变量或对象在一定的区
域内(比如函数内,全局等)只能被定义一次,如果定义多次,编译器会提示你重复定义
同一个变量或对象。
什么是声明:有两重含义,如下:
第一重含义:告诉编译器,这个名字已经匹配到一块内存上了(伊人已嫁,吾将何去何
从?何以解忧,唯有稀粥),下面的代码用到变量或对象是在别的地方定义的。声明可以出
现多次。
第二重含义:告诉编译器,我这个名字我先预定了,别的地方再也不能用它来作为变量
名或对象名。比如你在图书馆自习室的某个座位上放了一本书,表明这个座位已经有人预
订,别人再也不允许使用这个座位。其实这个时候你本人并没有坐在这个座位上。这种声
明最典型的例子就是函数参数的声明,例如:
void fun(int i, char c);
好,这样一解释,我们可以很清楚的判断:A)是定义; B)是声明。
那他们的区别也很清晰了。

记住,

定义声明最重要的区别:定义创建了对象并为这个对象分配了内存,声明没有分配内存(一个抱伊人,一个喝稀粥。 ^_^)。

C/C++ —— 什么是定义?什么是声明?相关推荐

  1. Go 学习笔记(10)— 数组定义、数组声明、数组初始化、访问数组、数组相等、向函数传递数组

    1. 数组定义 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形.字符串或者自定义类型. 2. 声明数组 Go 语言数组声明需要指定元素类型及元素个数,语 ...

  2. 函数定义、函数声明、函数原型

    函数定义.函数声明.函数原型:变量声明.变量定义:类型声明.类型定义 1.函数定义.函数声明.函数原型 2.变量声明.变量定义 3.类型声明.类型定义 1.函数定义.函数声明.函数原型 函数声明中不但 ...

  3. Go 学习笔记(6)— 变量定义、变量声明、变量作用域

    1. 变量定义 Go 语言变量名由字母.数字.下划线组成,其中首个字符不能为数字.声明变量的一般形式是使用 var 关键字: var varName dataType [= value] Go 语言和 ...

  4. typedef 字符串_typedef在C中使用字符数组(定义别名来声明字符串)的示例

    typedef 字符串 Here, we have to define an alias for a character array with a given number of maximum ch ...

  5. C语言的函数定义和函数声明

    C语言不同于Java语言,在Java语言中,在一个类中,定义函数/方法后,在调用时不需要声明.在C语言中定义函数后,在使用前,需要在main函数前进行声明,否则会报错. #include<std ...

  6. android js变量定义数组,js 声明数组和向数组中添加对象变量的简单实例

    数组有四种定义的方式 使用构造函数: var a = new Array(); var b = new Array(10); var c = new Array("first", ...

  7. C 语言 —— 函数定义和函数声明

    概念   函数定义:指对函数功能的确立,包括指定函数名,函数值类型.形参类型.函数体等,它是一个完整的.独立的函数单位. 返回值类型 函数名(参数列表) {//函数体 }   函数声明:把函数的名字. ...

  8. Python定义变量不用声明类型

    当在定义变量i时 声明为int类型时,运行程序就会出现语法格式错误,经过上网查询后得知Python不用去声明函数的返回类型,是由于其"若类型"的语言特性决定的.python是一种解 ...

  9. C++ 笔记(05)— 变量(变量定义、声明、初始化、extern关键字、变量之间转换)

    1. 变量定义 变量定义就是告诉编译器在何处创建变量的存储,以及如何创建变量的存储.变量定义指定一个数据类型,并包含了该类型的一个或多个变量的列表,如下所示: type variable_list; ...

  10. 变量声明和定义的区别

    转自:http://www.cnblogs.com/GavinDai/archive/2011/10/24/2222735.html 我们在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候 ...

最新文章

  1. jquery点击后执行PHP加载div,PHP-将JQuery自动完成附加到由Ajax调用加载的文本字段...
  2. java设计模式-建造者模式
  3. SAP修改科目为未清项管理和行项目显示
  4. 抽了几天用Flex写了个上传小工具,支持批量上传,支持配置
  5. php sqlserver开发实例,Linux_用sql脚本创建sqlserver数据库范例语句,下面是创建一个sqlserver数据库 - phpStudy...
  6. avue里面的select怎么设置默认值_mysql大量的waiting for table level lock怎么办
  7. Swift 语言概览 -自己在Xcode6 动手写1
  8. 库会因为权限问题无法打开——selinux开启严格模式
  9. postgresql 时区与时间函数
  10. Adapter(适配器)模式
  11. Jmeter性能测试工具实现对数据库mysql进行连接并压测
  12. 如何快速下载百度网盘大文件
  13. xp无法访问win7计算机,xp连接win7共享打印机无法连接
  14. 东数西算,浪潮云在枢纽节点提供服务
  15. python 作用域知识点整理
  16. 南京市城镇居民基本医疗保险暂行办法实施细则
  17. 基于以太坊开发的类似58同城的DApp开发与应用案例
  18. C++进阶_Effective_C++第三版(六) 继承与面向对象设计 Inheritance and Object-Oriented Design
  19. 架构设计面试题 (史上最全、持续更新、吐血推荐)
  20. mplfinance蜡烛图 均线成交量

热门文章

  1. linux中出现不在 sudoers 文件中。此事将被报告的解决方法
  2. 北斗三号频点_北斗三号将为手机用户带来更好用户体验
  3. conda能够实现多个环境共存原因的感悟
  4. 数据库事务隔离标准分析
  5. python飞机大战概要设计_飞机大战大学课程设计初稿.doc
  6. Python3爬取英雄联盟英雄皮肤大图
  7. 【Unity游戏开发笔记】手游-涂鸦弹跳开发分析
  8. c++ 实现线索二叉树
  9. python怎么撤销_关于Python:Python-如何删除/取消导入之前已导入的库
  10. 360下载win2003