第2章 变量和基本类型 附1---变量和对象的区别

在C++ primer里讲到:    对象(object)是一块能存储数据并具有某种类型的内存空间。 已命名的对象-----称为变量(variable)。

-------------------------------------------------------------------------------------------------------

对象和变量这两个概念莫要搞乱,颈是颈,椎是椎,虽然两者都对应着一块内存,但是从不同的角度去理解内存就会产生不同的意义。

  1. 变量:所谓变量就是一种定义,通过定义编译器将会开辟一段空间,并将这段内存空间和这个变量的名字捆绑在一起。从这个意思去理解,其实说白了:变量名就是内存在代码中可视化的一个符号。也就是说,如int a,a只是内存中某段地址在代码中可视化的一个符号,a本身作为符号并不占用空间,占用空间的是a所对应着的那个变量,通过a这个符号我们可以引用到该变量在内存中的位置。就好比是人和名字的关系,人作为一个真真正正的实体,是占用地球的物理空间的,是一个真实的存在,而这个人的名字只是代表了这个人的一个符号,本身并没有占用地球的物理空间,只是在他妈把他生下来的时候,把人这个实体和名字捆绑在了一起,因此,我们引用这个人的名字的时候,就等于我们找到了这个人。
  2. 对象:对象就是内存中一段有类型的区域。从这句话的描述上来看,对象至于变量,似乎更关注的是这对内存的类型,而不是名字。不能说变量就是对象,或者对象就是变量,严格来说,对象就是用来描述变量的。一点佐证是,C++中的临时变量的概念,如传参时生成的临时变量,该变量在内存中存在,但是是没有名字的,因此在代码中无法可视化,我们就无法通过名字去引用这个临时变量。

两者的区别与联系

从上面的两个描述中我们可以看到,两者都是用来描述一段内存的,但是是从不同的角度去描述:

  • 变量更强调的是变量名这个符号的含义,更强调名字与内存的联系,而不必关注这段内存是什么类型,有多少字节长度,只关注这个变量名a对应着某段内存。
  • 而对象的描述更强调的是内存的类型而不在乎名字,也就是说,从对象的角度去看内存,就需要清楚这段内存的字节长度等信息,而不关注这个对象在代码中是否有一个变量名来引用到这段内存。

-----------------------------------------

总结--  对象关注的是内存空间;而变量关注的是名字与内存的联系。

举例:

int a;

如果我们说a是个变量,那我们关注的只是a这个名字对应着一块内存,当我们引用a时,我们能明确的知道我们引用的是a这个名字所对应的内存空间,而不是别的,也不去关注这个a的内存是个int啊char啊之类的什么类型。如果我们说a是个对象,则我们需要知道这个对象具体是什么类型,当我们引用并操作a的时候,就能根据类型信息做一些符合类型语义的操作,而不是暴力访问内存,任意解析内存中的数据

时间: 2024-10-17 05:01:24

第2章 变量和基本类型 附1---变量和对象的区别的相关文章

第2章 变量和基本类型 附2 --声明和定义的区别

变量声明和定义的区别 我们在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的把他们的区别介绍如下:(望我的指点对你受益) 变量的声明有两种情况: 1.一种是需要建立存储空间的.例如:int a 在声明的时候就已经建立了存储空间.----定义 2.另一种是不需要建立存储空间的. 例如:extern int a 其中变量a是在别的文件中定义的.-----声明 前者是“定义性声明(defining declara

第2章 变量和基本类型 附3---底层const和顶层const

和英文版的对: As we’ve seen, a pointer is an object that can point to a different object. As a result,we can talk independently about whether a pointer is const and whether the objectsto which it can point are const. We use the term top-level const to indi

C++ Primer学习总结 第1-2章 变量和基本类型

第1-2章 变量和基本类型 1.下面这个语句在C++98和C++11中的输出结果不同. C++98结果: (如果想要更高的精度,可以用%.9lf,输出9位有效数字) C++11结果: 结论: printf的%lf在C++11中表示longdouble,所以用中%f就可以输出float和double类型.而printf在C++98中可以用%lf正确输出double. 如果是scanf的话,不论C++98还是C++11中float都用%f读取,double都用%lf读取,因为二者结构不同.   2.

C++ Primer 笔记(2)第二章 变量与基本类型

第二章 变量与基本类型 1.基本内置类型包括算术类型和空类型,算术类型分为两类:整型(包括字符和布尔类型)和浮点型: 2.布尔类型(bool)的取值是真(true)或者假(false): 3.字面值常量:每个字面值常量都对应一种数据类型,字面值常量的形式和值决定了它的数据类型, 由单引号括起来的一个字符是char型字面值,有双引号括起来的零个或者多个字符则构成字符串字面值: 20  整形字面值 ‘a’ 字符字面值 “Hello World”或者“”都会字符串字面值 ‘A’表示单独字符A,而“A”

<<C++ Primer>> 第 2 章 变量和基本类型 术语表

术语表 第 2 章 变量和基本类型 地址(address): 是一个数字,根据它可以找到内存中的一个字节 ?? 别名生命(alias declaration): 为另一种类型定义一个同义词:使用 "名字 = 类型" 的格式将名字作为该类型的同义词. ?? 算术类型(arithmetic type): 布尔值,字符,整数,浮点数等内置类型. ?? 数组(array): 是一种数据结果,存放着一组未命名的对象,可以通过索引来访问这些对象. ?? auto: 是一种类型说明符,通过变量的初始

第3章 类型,值和变量

能够表示并操作的值的类型称做数据类型(type) JS中包含 原始类型(primitive type) 和 对象类型(object type) 原始类型包括:数字,字符串,布尔值,NULL,undefined 对象(object)是属性(property)的集合,每个属性都是键值对(key/value)构成. 数组(array)是一种特殊的对象,普通的对象是"命名值"的无序集合,而数组表示带编号的值的有序集合 函数(function)也是一种特殊的对象,函数是具有与它相关联的可执行代码

第2章 变量和基本类型

2015-10-08 20:18:32 注:  之前解除过C++比较少,只学过C语言. ----------------------------------------------------------- 内置类型是编程语言自己定义的一些类型,不需要我们自己定义了. 比如bool.int: 空类型Void  不对应具体的值,仅用于特殊的场合,例如最常见的是,当函数不反悔任何值时使用空类型作为返回值. 使用浮点数时,选用double---因为float的精度不够,且计算的时候,双精度和单精度的代

c++primer第二章读书笔记---变量和基本类型

C++中,什么是复合类型? 刚开始,还以为自定义的类是复合类型.查了C++ primer才知道复合类型不是类. 在C++中类型大致可以分为三种 一.内置类型 如int, char, float, unsigned等.内置类型是最基本的类型. 二.复合类型 复合类型:基于其他类型定义的类型,使用其它类型定义的类型.有三种复合类型:引用,指针,数组. 三.类类型 就是类.比如string以及自己定义的类. (一)复合类型---引用 引用就是为对象起了个名字 引用使用注意事项: 1.一个变量可取多个别

第二章 变量和基本类型(2)

2.1 基本内置类型(略过,没什么可写的,都是一些基本的东西) 2.2 字面值常量 5.字符串字面值 1.之前的字面值都是基本的内置类型 2.字符串字面值,是用双引号括起来的0个和多个字符表示,""或者"hello word" 3.为了兼容C语言,C++中所有的字符串字面值都有编译器g++自动在末尾添加一个空字符. 4.字符字面值'A',表示的是单个字符A 5.字符串字面值"A",表示的是字母A和空字符,2个字符的字符串 2.3 变量 关键概念: