C++中 数据类型和变量名的区别和联系 10
如题:上课老师问的...然后迷茫..C++中数据类型和变量名有什么区别和联系?请高手们回答下~~谢谢...
如题:
上课老师问的...然后迷茫..
C++中 数据类型和变量名有什么区别和联系?
请高手们回答下~~谢谢 展开
上课老师问的...然后迷茫..
C++中 数据类型和变量名有什么区别和联系?
请高手们回答下~~谢谢 展开
5个回答
展开全部
首先,数据类型即对象类型是一种类型(type),是一种实体(entity);而变量名是指称(denote)变量(viarable)这种实体的名称(name)。通过名称指称实体是语言中表达实体存在性的手段。实体是语言所要表达的语义,而名称则是在代码中通过字符方式体现的,两者是不同的概念。类似地,人是一个实体,人的姓名是名称,可以通过姓名来指代一个人,但不能把两者等同起来。(尽管一般教材对这点比较模糊甚至根本没有叙述,理解实体和名称的不同是非常重要的。)LS的论述显然就是忽略了这点的反面教材之一(LZ的老师或许只是口误)。
其次,“类型”和“变量”C++语言中的两种实体。变量是一种对象,而对象是在程序运行期是在随机存储器(例如内存的栈和寄存器)中可以有对应实际存在的数据的实体;变量起的主要作用是表达一个值;同时,因为是对象,具有确定的类型。对象的类型则可以理解为是对对象进行的分类,以便在编译期根据不同的类型分配具体操作以及进行静态类型检查。关于(静态)类型存在的必要性,举例来说,16位和32位整数加法对应的指令可以是不同的,如果只定义了一个i,那么编译器不知道诸如表达式i + i中的+应该被编译成哪条指令。而确定了i是int类型(一般为32位),编译器就可以知道这个+是指哪条指令了。
C++是强类型语言,编译期定义对象时类型必须被确定,且无法改变。这点在某种意义上保证了对于确定对象的操作的确定性:对于不兼容的操作,很可能因为无法通过静态类型检查无法而产生编译错误,这样能够有效地减少用户写出能通过编译但逻辑上有错误的代码。
注意类型不是对象。从源代码的角度而言,类型不是语言的一等公民(first-class citizen)/第一类实体(first-class entity),大部分对于对象的操作都不能作用于类型之上,例如C++中类型不能作为函数(包括运算符)的参数(在参数列表中出现仅指示参数对象的类型),而只能作为模板(template)的参数;注意调用操作符的表达式实质上和函数调用相同。这样,要是写int + int会引起编译错误:int是类型而不是对象;int a = 0, b = 1, c; c = a + b;之类的则没有问题:a和b是经过声明的对象,对象可以和操作符+组成表达式。从目标代码的角度而言,编译器知道对象的类型,但编译后的目标代码不包含类型信息(用RTTI特性可以映射类型为对象然后进行操作,但受到严格的限制)。
----
以下是严格的定义,参照C++03:
3 Basic concepts
--
3 An entity is a value, object, subobject, base class subobject, array element, variable, function, instance of a
function, enumerator, type, class member, template, or namespace.
4 A name is a use of an identifier (2.10) that denotes an entity or label (6.6.4, 6.1). A variable is introduced
by the declaration of an object. The variable’s name denotes the object.
----
题外话:
声明是指在声明所在处引入一个名称,这个名称从声明开始到作用域结束(取决于声明本身所在的位置)持续有效(特殊情况下被另外声明的同名名称隐藏除外)。定义是指在源代码所在的翻译单元(可以简单理解为包含了头文件的源文件)引入一个实体。定义一个某个类型的对象也称为类型的实例化(instantiation)。定义了的对象是这个类型的一个实例(instance)。
====
[原创回答团]
其次,“类型”和“变量”C++语言中的两种实体。变量是一种对象,而对象是在程序运行期是在随机存储器(例如内存的栈和寄存器)中可以有对应实际存在的数据的实体;变量起的主要作用是表达一个值;同时,因为是对象,具有确定的类型。对象的类型则可以理解为是对对象进行的分类,以便在编译期根据不同的类型分配具体操作以及进行静态类型检查。关于(静态)类型存在的必要性,举例来说,16位和32位整数加法对应的指令可以是不同的,如果只定义了一个i,那么编译器不知道诸如表达式i + i中的+应该被编译成哪条指令。而确定了i是int类型(一般为32位),编译器就可以知道这个+是指哪条指令了。
C++是强类型语言,编译期定义对象时类型必须被确定,且无法改变。这点在某种意义上保证了对于确定对象的操作的确定性:对于不兼容的操作,很可能因为无法通过静态类型检查无法而产生编译错误,这样能够有效地减少用户写出能通过编译但逻辑上有错误的代码。
注意类型不是对象。从源代码的角度而言,类型不是语言的一等公民(first-class citizen)/第一类实体(first-class entity),大部分对于对象的操作都不能作用于类型之上,例如C++中类型不能作为函数(包括运算符)的参数(在参数列表中出现仅指示参数对象的类型),而只能作为模板(template)的参数;注意调用操作符的表达式实质上和函数调用相同。这样,要是写int + int会引起编译错误:int是类型而不是对象;int a = 0, b = 1, c; c = a + b;之类的则没有问题:a和b是经过声明的对象,对象可以和操作符+组成表达式。从目标代码的角度而言,编译器知道对象的类型,但编译后的目标代码不包含类型信息(用RTTI特性可以映射类型为对象然后进行操作,但受到严格的限制)。
----
以下是严格的定义,参照C++03:
3 Basic concepts
--
3 An entity is a value, object, subobject, base class subobject, array element, variable, function, instance of a
function, enumerator, type, class member, template, or namespace.
4 A name is a use of an identifier (2.10) that denotes an entity or label (6.6.4, 6.1). A variable is introduced
by the declaration of an object. The variable’s name denotes the object.
----
题外话:
声明是指在声明所在处引入一个名称,这个名称从声明开始到作用域结束(取决于声明本身所在的位置)持续有效(特殊情况下被另外声明的同名名称隐藏除外)。定义是指在源代码所在的翻译单元(可以简单理解为包含了头文件的源文件)引入一个实体。定义一个某个类型的对象也称为类型的实例化(instantiation)。定义了的对象是这个类型的一个实例(instance)。
====
[原创回答团]
参考资料: 原创 + ISO-14882:2003
展开全部
数据类型 包括
int型
float型
double 型
long int 型
char 型
string 型
等等
变量名
比如说 float length=2.9;
float 就是数据类型名
length 就是变量名
length 是float这种数据类型 里面的一个变量
既然length 被定义为是float型的数据
那么 length变量 就不能 是其他类型的变量啦 只能是float型的变量
int型
float型
double 型
long int 型
char 型
string 型
等等
变量名
比如说 float length=2.9;
float 就是数据类型名
length 就是变量名
length 是float这种数据类型 里面的一个变量
既然length 被定义为是float型的数据
那么 length变量 就不能 是其他类型的变量啦 只能是float型的变量
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
例如 :int a;
int是数据类型,a是变量名,数据类型定义类该变量所存储的数据的类型,是整形还是浮点型, 变量名不知道怎么说,总之以后要操作这个变量的时候就用这个变量的名字
int是数据类型,a是变量名,数据类型定义类该变量所存储的数据的类型,是整形还是浮点型, 变量名不知道怎么说,总之以后要操作这个变量的时候就用这个变量的名字
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是“抽象”与“具象”的关系。
数据类型是对该类型的变量的抽象,它定义了它的对象可能的取值类型及其对应的操作,变量则是该类型的一个实例,它的值是确定的,具体的,与众不同的。
打个比方,“人”是一个抽象的概念,而“张三”是具体的。“人”的眼睛是“人”所共有的,“张三”是“人”,所以“张三”也有一双眼睛,但是“张三”的眼睛与别人的眼睛是不同的。
数据类型是对该类型的变量的抽象,它定义了它的对象可能的取值类型及其对应的操作,变量则是该类型的一个实例,它的值是确定的,具体的,与众不同的。
打个比方,“人”是一个抽象的概念,而“张三”是具体的。“人”的眼睛是“人”所共有的,“张三”是“人”,所以“张三”也有一双眼睛,但是“张三”的眼睛与别人的眼睛是不同的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果你能理解实例化的概念 这个也就很好理解了
比如你自己定义了一个结构
struct A
{
}
这个结构其实就和int啊这些类型是一样的 只不过是你自己定义的
但是光有这个结构你还不能使用它,你还需要把它实例化一个变量出来
struct A a
这时候a就是变量名 你能对a进行操作,而不是去操作A
举个简单的例子
比如说定义会呼吸的生命体叫做生物,但是生物是一个概念,生物这个概念是不能呼吸的,需要具体到某一种生物,比如说你是一种生物,因此你会呼吸,你可以呼气,可以吸气
生物就像数据类型 是一种定义、概念
你就是变量名 是具体的一种存在
比如你自己定义了一个结构
struct A
{
}
这个结构其实就和int啊这些类型是一样的 只不过是你自己定义的
但是光有这个结构你还不能使用它,你还需要把它实例化一个变量出来
struct A a
这时候a就是变量名 你能对a进行操作,而不是去操作A
举个简单的例子
比如说定义会呼吸的生命体叫做生物,但是生物是一个概念,生物这个概念是不能呼吸的,需要具体到某一种生物,比如说你是一种生物,因此你会呼吸,你可以呼气,可以吸气
生物就像数据类型 是一种定义、概念
你就是变量名 是具体的一种存在
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询