变量声明和定义的区别
变量的定义与声明
1.变量的定义从前面的章节可以看出,程序中所有的东西几乎都有名字。
然而字面量却是个例外,它没有名字。
那么使用变量,我们就可以为某个值取名字了。
实际上,我们是为系统内存中用于保存数据的某块空间取名字。
ANSI C规定:变量必须“先定义、后使用”,因此当用C定义变量时,不仅需要指定变量名,而且还必须告诉编译器其存储的数据类型,变量类型告诉编译器应该在内存中为变量名分配多大的存储单元,用来存放相应变量的值(变量值),而变量仅仅是存储单元的别名,供变量使用的最小存储单元是字节(Byte)。
由此可见,每个变量都占据一个特定的位置,每个存储单元的位置都由“地址”唯一确定并引用,就像一条街道上的房子由它们的门牌号码标识一样。
即从变量中取值就是通过变量名找到相应的存储地址,然后读取该存储单元中的值,而写一个变量就是将变量的值存放到与之相应的存储地址中去。
由于变量的定义不是可执行代码,因此要求局部变量的定义必须位于用“{}包围的程序块”的开头,即在可执行代码的前面。
比如:int lower_limit = 80; //定义lower_limit为整型变量即在定义lower_limit为int类型数据时,系统就已经为变量lower_limit分配了存储单元。
请注意区分变量名和变量值这两个不同的概念,其中,lower_limit为变量名,80为变量lower_limit的值,即存放在变量lower_limit的存储单元中的数据。
那么到底如何获得变量的地址呢?C语言使用“&(地址运算符)加变量名”的方式获取变量的地址,比如,&lower_limit就代表变量lower_limit的地址,详见后续相关章节的描述。
一个定义只能指定一种变量类型,虽然后面所带的变量表可以包含一个或多个该类型的变量:int lower_limit , upper_limit , sum;但如果将一个定义语句中的多个变量拆开在多个定义语句中定义的话:int lower_limit; // lower_limit为数据下限int upper_limit;// upper_limit为数据上限int sum;// sum为求和的结果则可在各个定义语句中添加注释,则大大提高了程序的可阅读性,而且修改起来更加方便,但C编译器会忽略在每行右边用于描述变量用途的注释语句。
关于C++的变量和类的声明和定义
关于C++的变量和类的声明和定义什么是变量?变量或者叫对象,是⼀个有具名的、可以供程序操作的存储空间。
这⾥具名是指变量是有名字的,可供操作是指能进⾏加减乘除或者输⼊输出等操作,存储空间则是指有⼀块属于它的内存空间。
为了便于说明,标题和后⾯的内容将对象分为两种。
对于内置的,⽂章称作为变量,对于⾃定义的,称之为对象。
第⼀个问题:在C++中,什么是定义,什么是声明?①定义:⽤于为变量分配存储空间,还可为变量指定初始值。
在程序中,变量有且仅有⼀个定义。
②声明:⽤于向程序表明变量的类型和名字。
在程序中,变量可以有多个声明。
定义也是声明:当定义变量时我们声明了它的类型和名字。
上⾯的这些内容很容易理解,很多情况下,定义就是声明,由于C++⽀持分离式编译,因此⼀个C++程序允许别分成许多块,由这些块共同组成完整的程序。
既然程序可以分成多块,那么如果要在所有块之间共⽤⼀个变量,那就要能够在这些块之间共享代码。
为了⽀持这种分离式编译机制,C++中就将声明和定义区分开来了。
第⼆个问题:定义也是声明,那么如果仅仅声明?回答这个问题之前,需要了解什么是作⽤域,这⾥假定你已知晓C++的作⽤域知识。
在需要声明⼀个变量之前,先想⼀想为什么需要声明变量?因为程序需要使⽤定义在别处(通常是别的⽂件中)的变量。
这⾥使⽤别处的变量暗含了⼀个意义,这个变量应当是个全局变量,因为当前作⽤域找不到,所以需要去别的地⽅找,⽽别的地⽅定义的变量应当全局变量,能够被我看到(这⾥只考虑全局变量,其他情况暂不考虑)。
既然变量已经在别的地⽅定义过了,⽽且变量有且仅有⼀个定义,那么我不能再次定义⽽只能声明了,如何声明?声明的⽅式是使⽤extern关键词,形如extern int i,这⾥有了关键词extern的修饰,因此是⼀个声明,⽽不是定义。
从这个声明中,得知了变量的类型和名字,但是没有分配内存。
假如给上⾯声明的变量⼀个值,那还是不是声明呢?回答是:不是。
C++中的extern声明变量详解
C++中的extern声明变量详解extern声明变量⽆外乎如下两种:1、声明全局变量2、声明函数今天我们只谈extern,什么const、static之类等等与之相关或不相关的⼀律忽略,下⾯就分别对以上两种情况⼀⼀讲解声明和定义既然提到extern声明变量,那我们就必须搞清楚声明和定义的区别。
这⾥我们将普通数据变量和函数统称变量。
从内存分配⾓度来说,声明和定义的区别在于声明⼀个变量不会分配内存,⽽定义⼀个变量会分配内存。
⼀个变量可以被声明多次,但是只能被定义⼀次。
基于以上前提,我们可以把声明和定义类⽐为指针和内存的关系。
我们知道,指针其实就是指向内存的⼀个符号,变量的定义就好⽐⼀块内存区域,⽽声明就好⽐它的指针,可以有多个指针指向同⼀个内存区域,⽽⼀个指针只能指向⼀个内存区域,这样就很好理解为什么变量只能被定义⼀次,如果被定义多次,那就会分配多个内存,这样你通过变量的声明到底去找哪块内存区域呢,这会是个问题。
对于数据来说,声明和定义往往是同时存在的,⽐如下⾯的⼀⾏语句复制代码代码如下:int data;这样既声明了data同时也定义了data,怎样做到只声明⽽不定义呢,⽤extern就可以了复制代码代码如下:extern int data;对于函数来说,声明和定义就很容易区分了,⼀般我们会将声明放在头⽂件⽽将定义放在源⽂件⾥复制代码代码如下:void hello();这是⼀个函数的声明,⽽复制代码代码如下:void hello(){printf("hello world!\n");}这是⼀个函数的定义。
当然,函数的声明和定义也可以同时发⽣,如果我们没有头⽂件⽽只有源⽂件,并且在源⽂件⾥并没有void hello();这样的语句,那么这个函数的声明和定义就同时发⽣了,此时如果我们在原⽂件⾥想要调⽤函数hello(),你调⽤的代码必须在函数定义之后。
其实上⾯的要点只在于⼀句话:使⽤变量之前必须声明,声明可以有多次,⽽定义只能有⼀次。
变量名词解释答
变量名词解释答变量是计算机程序中用于存储数据的一种命名空间,它是一个标识符,可以唯一地表示一个特定的数据值。
在程序中,变量可以用于存储和操作各种类型的数据,包括数字、字符、文本、列表、对象等。
变量名定义了变量在程序中的标识符,它是一个由字母、数字和下划线组成的字符串。
变量名需要遵循一定的命名规则,如不能以数字开头,不能使用关键词作为变量名,区分大小写等。
通过给变量赋值,可以将一个数据值存储在变量中。
这样在程序的其他地方就可以使用这个变量来获取或修改其中的值。
通过变量的引用,可以实现对同一个数据的多次访问和使用。
除了存储数据,变量还可以用于控制程序的执行流程。
在条件语句和循环语句中,可以通过使用变量来控制不同的分支和循环次数,从而实现程序的灵活性和可扩展性。
拓展:1.变量的作用域:变量的作用域指的是变量的可见范围,在不同的代码块中可以定义同名的变量,但它们的作用域是独立的。
常见的作用域有全局作用域和局部作用域。
2.变量的数据类型:不同编程语言支持不同的数据类型,如整型、浮点型、布尔型、字符串型等。
变量的数据类型决定了它能够存储哪些类型的数据以及可以进行哪些操作。
3.变量的声明和初始化:在使用变量之前,需要先声明该变量的类型和名称。
声明变量是为变量分配内存空间,而初始化变量则是给变量赋初值。
4.变量的命名规范:为了代码的可读性和可维护性,变量名应该简洁、具有描述性、符合命名规范,并且避免使用单个字母或含糊不清的命名。
5.变量的命名惯例:在不同编程语言和开发团队中存在一些变量命名的惯例,如使用驼峰命名法、下划线命名法等,可以提高代码的可读性和一致性。
C语言变量定义与声明的基本规则
C语言变量定义与声明的基本规则
在C语言中,定义和声明变量需要遵循一定的语法规则。
下面是一些基本示例和说明:
1.定义变量:
在C语言中,您可以使用int,float,double,char等关键字来定义不同类型的变量。
以下是几个示例:
int a; // 定义一个整数变量a
float b; // 定义一个浮点数变量b
char c; // 定义一个字符变量c
2.声明变量:
变量的声明通常在程序开始时进行,以告诉编译器变量的名称和类型。
这是一种形式,你也可以在使用变量之前声明它。
以下是几个示例:int a; // 声明一个整数变量a
float b; // 声明一个浮点数变量b
char c; // 声明一个字符变量c
然后,你可以在程序的任何地方使用这些变量。
例如:
a = 10; // 给整数变量a赋值10
b = 3.14; // 给浮点数变量b赋值3.14
c = 'A'; // 给字符变量c赋值'A'
注意:变量可以在其作用域内被重复定义和声明。
例如,在一个函数内部定义的变量只在该函数内部可见,但在函数外部定义的变量在整个程序中都可见。
这就是为什么我们常常在main函数的开始部分定义所有变量。
什么是变量
什么是变量?变量(Variable)是编程中用于存储和表示数据的一种概念。
它们是在代码中用来引用和操作数据的命名存储空间。
变量可以存储各种类型的数据,例如数字、文本、布尔值、对象等。
以下是关于变量的一些重要方面:1. 声明变量:在使用变量之前,需要先声明它。
变量的声明告诉编程语言要为该变量分配存储空间,并给它一个唯一的名称。
声明变量通常涉及指定变量的名称和数据类型。
2. 变量名称:变量名称是用来标识变量的唯一标识符。
它们可以由字母、数字和下划线组成,但必须以字母或下划线开头。
变量名称应具有描述性,以便在代码中理解其用途和含义。
3. 数据类型:变量可以具有不同的数据类型,这决定了变量可以存储的数据种类和范围。
常见的数据类型包括整数(integers)、浮点数(floats)、布尔值(booleans)、字符串(strings)和对象(objects)。
在一些语言中,还可以使用动态类型或弱类型来允许变量在运行时更改其数据类型。
4. 赋值:变量通过赋值操作来存储数据。
赋值使用等号(=)将数据值分配给变量。
例如,`x = 5` 将整数值5 赋给变量`x`。
赋值操作将数据存储在变量的存储空间中,以便在代码中使用和引用。
5. 变量的值:变量的值是存储在变量中的数据。
可以使用变量的名称来访问和操作其值。
例如,`x = 5` 中的`x` 是变量的名称,可以使用`x` 来引用存储在变量中的整数值5。
6. 变量的作用域:变量的作用域是变量在代码中可见和可访问的范围。
变量可以具有全局作用域(在整个程序中可见)或局部作用域(仅在特定代码块或函数中可见)。
作用域规定了变量的生命周期和可访问性。
7. 变量的修改和更新:一旦变量被声明和赋值,可以通过赋予新值来修改变量的内容。
例如,`x = 5` 后可以使用`x = 10` 来将变量`x` 的值更新为10。
这使得变量可以在程序的不同部分存储不同的数据。
8. 变量的传递:变量可以作为参数传递给函数或方法,以便在函数内部使用。
变量的声明与定义
变量声明和定义的区别我们在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的把他们的区别介绍如下:(望我的指点对你受益)变量的声明有两种情况:1、一种是需要建立存储空间的。
例如:int a 在声明的时候就已经建立了存储空间。
2、另一种是不需要建立存储空间的。
例如:extern int a 其中变量a是在别的文件中定义的。
前者是“定义性声明(defining declaration)”或者称为“定义(definition)”,而后者是“引用性声明(referncing declaration)”,从广义的角度来讲声明中包含着定义,即定义是声明的一个特例,所以并非所有的声明都是定义,例如:int a 它既是声明,同时又是定义。
然而对于extern a 来讲它只是声明不是定义。
一般的情况下我们常常这样叙述,把建立空间的声明称之为“定义”,而把不需要建立存储空间的声明称之为“声明”。
很明显我们在这里指的声明是范围比较窄的,即狭义上的声明,也就是说非定义性质的声明,例如:在主函数中:int main() {extern int A;//这是个声明而不是定义,声明A是一个已经定义了的外部变量//注意:声明外部变量时可以把变量类型去掉如:extern A;dosth(); //执行函数}int A; //是定义,定义了A为整型的外部变量外部变量的“定义”与外部变量的“声明”是不相同的,外部变量的定义只能有一次,它的位置是在所有函数之外,而同一个文件中的外部变量声明可以是多次的,它可以在函数之内(哪个函数要用就在那个函数中声明)也可以在函数之外(在外部变量的定义点之前)。
系统会根据外部变量的定义(而不是根据外部变量的声明)分配存储空间的。
对于外部变量来讲,初始化只能是在“定义”中进行,而不是在“声明”中。
所谓的“声明”,其作用,是声明该变量是一个已在后面定义过的外部变量,仅仅是为了“提前”引用该变量而作的“声明”而已。
声明变量和定义变量的区别是什么?
声明变量和定义变量的区别是什么?
1.什么是定义,什么是声明
(1)在 C语⾔中,使⽤变量之前必须先定义变量。
所谓定义变量,就是编译器创建了⼀个变量,为这个变量分配⼀块内存并命名(变量名)。
例如,定义整型变量 a。
int a;
这条语句说明了 a是⼀个整型变量,编译器将为其分配⼀块⼤⼩为 int型数据所占的内存空间。
a没有被赋初值,它的初值默认为 0。
在定义的同时,也可以为其赋值进⾏初始化。
如:
int a=1;
这条语句不仅说明了编译器为 a分配了内存,还说明了在整型变量 a分配的内存中存储的值。
注意:
不应该在头⽂件中定义变量,因为⼀个头⽂件可能会被⼀个程序的许多源⽂件所包含。
(2)所谓声明,就是告诉编译器变量的类型,编译器并不为其分配内存,此变量已经定义过,故声明可以多次进⾏。
例如,声明外部变量a。
extern int a;
这条语句说明了 a是⼀个外部整型变量,并且它的存储空间是在程序的其他区域分配的。
extern置于变量前,以标⽰变量的定义在别的区域中,下⾯的代码⽤到的变量 a是外部的,不是本区域定义的,提⽰编译器遇到变量 a在其他区域中寻找其定义。
2.声明变量和定义变量的区别
(1)定义创建了变量,并为其分配内存;声明没有分配内存。
(2)⼀个变量在⼀定的区域内只能被定义⼀次,却可以被多次声明。
你可能不知道的,定义,声明,初始化
你可能不知道的,定义,声明,初始化声明定义虽然⽆处不在,但是真正的想区分它们,却不是表⾯上那么简单。
⾸先,从⼴义的⾓度来讲声明中包含着定义:定义⼜可以称之为,“声明性定义”;⽽狭义的声明,有可称之为“引⽤性声明”。
下⾯,我们就来讨论“声明性定义”与“引⽤性声明”。
的区别,之后简称定义与声明。
1、定义时系统会为定义的变量分配空间,⽽声明时,不会分配空间。
这个是本质上的区别。
2、定义在程序中只能出现⼀次,⽽声明可以多次。
⽐如:如果两个c中有相同的全局变量“定义”,且没有初始化,编译器会认为第⼆个是声明⽽不是定义。
所以连续写两个int a;int a; 编译也不会出错,但是连续写int a = 1;int a = 1;编译出错。
(函数也⼀样)3、由2可见,在定义变量时初始化的副作⽤是告诉编译器,这是⼀个定义,⽽不是⼀个声明。
因为声明时,是不可以初始化的,具体的例⼦就是 extern int a; 这表⽰这是个声明⽽不是定义。
如果写成extern int a = 1;编译就会报错。
结合1来想,这个就很正常了,因为声明是没有分配空间的,如何赋值呢?4、定义时可以完成声明,并且初始化!例如 int a = 0; //定义,声明,初始化就包含这⼀条语句之中。
//--------关于extern的⽤法-------------------extern的作⽤就是进⾏声明,实现调⽤其他⽂件的全局变量,或者函数。
由于声明可以多次,⼀般有的变量会被其他⽂件⽂件调⽤,那么⼀般会在该⽂件的头⽂件多声明⼀次改变量——extern + 变量。
那么如果另外⼀个⽂件包含了该头⽂件,就可以调⽤该变量。
//--------关于struct的声明定义初始化-------------------1、struct的定义(这⾥注意的是,struct定义的是类型,⽽不是变量;但是以上结论同样适⽤!)struct people //定义类型{char name[20];int age;};2、struct people; //声明类型,同样写两句⼀模⼀样的不会错!但是类型定义也只能⼀次。
C++全局变量的声明和定义
C++全局变量的声明和定义C++全局变量的声明和定义(1)编译单元(模块) 在VC或VS上编写完代码,点击编译按钮准备⽣成exe⽂件时,编译器做了两步⼯作: 第⼀步,将每个.cpp(.c)和相应的.h⽂件编译成obj⽂件; 第⼆步,将⼯程中所有的obj⽂件进⾏LINK,⽣成最终.exe⽂件。
那么,错误可能在两个地⽅产⽣: ⼀个,编译时的错误,这个主要是语法错误; ⼀个,链接时的错误,主要是重复定义变量等。
编译单元指在编译阶段⽣成的每个obj⽂件。
⼀个obj⽂件就是⼀个编译单元。
⼀个.cpp(.c)和它相应的.h⽂件共同组成了⼀个编译单元。
⼀个⼯程由很多编译单元组成,每个obj⽂件⾥包含了变量存储的相对地址等。
(2)声明与定义函数或变量在声明时,并没有给它实际的物理内存空间,它有时候可保证你的程序编译通过;函数或变量在定义时,它就在内存中有了实际的物理空间。
如果你在编译单元中引⽤的外部变量没有在整个⼯程中任何⼀个地⽅定义的话,那么即使它在编译时可以通过,在连接时也会报错,因为程序在内存中找不到这个变量。
函数或变量可以声明多次,但定义只能有⼀次。
(3) extern作⽤作⽤⼀:当它与"C"⼀起连⽤时,如extern "C" void fun(int a, int b);,则编译器在编译fun这个函数名时按C的规则去翻译相应的函数名⽽不是C++的。
作⽤⼆:当它不与"C"在⼀起修饰变量或函数时,如在头⽂件中,extern int g_nNum;,它的作⽤就是声明函数或变量的作⽤范围的关键字,其声明的函数和变量可以在本编译单元或其他编译单元中使⽤。
即B编译单元要引⽤A编译单元中定义的全局变量或函数时,B编译单元只要包含A编译单元的头⽂件即可,在编译阶段,B编译单元虽然找不到该函数或变量,但它不会报错,它会在链接时从A编译单元⽣成的⽬标代码中找到此函数。
定义C++全局变量常量几种方法的区别
在讨论全局变量之前我们先要明白几个基本的概念:1. 编译单元(模块):在IDE开发工具大行其道的今天,对于编译的一些概念很多人已经不再清楚了,很多程序员最怕的就是处理连接错误(LINK ERROR), 因为它不像编译错误那样可以给出你程序错误的具体位置,你常常对这种错误感到懊恼,但是如果你经常使用gcc,makefile等工具在linux 或者嵌入式下做开发工作的话,那么你可能非常的理解编译与连接的区别!当在VC这样的开发工具上编写完代码,点击编译按钮准备生成exe文件时,VC其实做了两步工作,第一步,将每个.cpp(.c)和相应.h文件编译成obj文件;第二步,将工程中所有的obj文件进行LINK生成最终的.exe文件,那么错误就有可能在两个地方产生,一个是编译时的错误,这个主要是语法错误,另一个是连接错误,主要是重复定义变量等。
我们所说的编译单元就是指在编译阶段生成的每个obj文件,一个obj文件就是一个编译单元,也就是说一个cpp(.c)和它相应的.h文件共同组成了一个编译单元,一个工程由很多个编译单元组成,每个obj 文件里包含了变量存储的相对地址等。
2. 声明与定义的区别函数或变量在声明时,并没有给它实际的物理内存空间,它有时候可以保证你的程序编译通过,但是当函数或变量定义的时候,它就在内存中有了实际的物理空间,如果你在编译模块中引用的外部变量没有在整个工程中任何一个地方定义的话,那么即使它在编译时可以通过,在连接时也会报错,因为程序在内存中找不到这个变量!你也可以这样理解,对同一个变量或函数的声明可以有多次,而定义只能有一次!3. extern的作用extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b); 则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而不是C++的,C++的规则在翻译这个函数名时会把fun这个名字变得面目全非,可能是fun@aBc_int_int#%$也可能是别的,这要看编译器的"脾气"了(不同的编译器采用的方法不一样),为什么这么做呢,因为C++支持函数的重载啊,在这里不去过多的论述这个问题,如果你有兴趣可以去网上搜索,相信你可以得到满意的解释!当extern不与"C"在一起修饰变量或函数时,如在头文件中: extern int g_Int; 它的作用就是声明函数或全局变量的作用范围的关键字,其声明的函数和变量可以在本模块活其他模块中使用,记住它是一个声明不是定义!也就是说B模块(编译单元)要是引用模块(编译单元)A中定义的全局变量或函数时,它只要包含A模块的头文件即可, 在编译阶段,模块B虽然找不到该函数或变量,但它不会报错,它会在连接时从模块A生成的目标代码中找到此函数。
浅谈声明与定义的区别
浅谈声明与定义的区别清楚明白声明与定义是一名合格的程序猿的基本要求。
本人认为,C++编码过程中谈及“声明”和“定义”只是因为我们要使用一个变量、类型(类、结构体、枚举、共用体)或者函数,因此有申明和定义变量、类型和函数之说。
C/C++中,使用一个变量、类型或者函数必须先在使用前申明它。
请记住,“声明”与“定义”的本质区别是:声明可以出现多次,而定义只能出现一次。
也请记住,把申明的东西放在头文件,把定义的东西放在源文件(.c或者.cpp文件)。
下面介绍申明和定义的具体含义:申明变量:指明变量所属类型与变量名称,如:extern int a;定义变量:指明变量所属类型、名称与初始化其初始值,如int a=1;或者int a(1);如果不显示初始化,则按照编译器默认进行初始化。
定义类型:指明类型的名称和内容,如struct test{int a;}。
或者给已经存在的类型起个别名,如typedef int int32;注意:(1)类型的作用域是源文件,因此在不同源文件定义相同名称的类型,比如定义同名的类是不会报重定义错误的,但在相同的源文件则编译器会报重定义错误。
(2)类型没有声明之说,即没有“申明类型”的说法,只给出类型的名称,让编译器去帮你查找类型的定义是不可行的。
比如extern class Test; 和class Test; 是无法通过编译的!使用类型之前给出其定义式即可,即给出类型的名称和内容,或者利用typedef给一个类型起个别称。
虽然说是定义类型,但还是将类型的定义放在头文件,即使被不同的源文件包含,因为其类型的作用域是源文件,所以不会报重定义错误的,这和变量和函数不同,不能将变量和函数的定义放在头文件!切记!申明函数:指明函数返回类型,函数名称和函数参数,如int test(char a, int b);定义函数:指明函数返回类型、函数名称、函数参数和函数体。
如int test(char a,int b){return a+b}参考文献:[1]陈刚.C++高级进阶教程[M].武汉:武汉大学出版社,2008.。
C语言中变量和函数的声明与定义
变量在将变量前,先解释一下声明和定义这两个概念。
声明一个变量意味着向编译器描述变量的类型,但并不为变量分配存储空间。
定义一个变量意味着在声明变量的同时还要为变量分配存储空间。
在定义一个变量的同时还可以对变量进行初始化。
局部变量通常只定义不声明,而全局变量多在源文件中定义,在头文件中声明。
局部变量在一个函数的内部定义的变量是内部变量,它只在本函数范围内有效。
自动变量auto函数中的局部变量,其缺省格式是自动变量类型。
例如,在函数体中int b, c=3。
和auto int b, c=3。
是等价的。
自动变量是动态分配存储空间的,函数结束后就释放。
自动变量如不赋初值,则它的值是一个不确定的值。
静态局部变量static静态局部变量是指在函数体内声明和定义的局部变量,它仅供本函数使用,即其他函数不能调用它。
静态局部变量的值在函数调用结束后不消失而保留原值,即其占用的存储单元不释放,在下一次函数调用时,该变量已有值,就是上一次函数调用结束时的值。
静态局部变量在静态存储区分配存储单元,在程序的整个运行期间都不释放。
静态局部变量是在编译时赋初值的,即只赋初值一次。
在SDT编译器中,建议对静态局部变量赋初值,否则该静态局部变量的初值为不确定值。
在其他编译器中,未初始化的静态局部变量的初值可能为零,这由具体的编译器所决定,使用前最好测试一下。
寄存器变量register带register修饰符的变量暗示(仅仅是暗示而不是命令)编译程序本变量将被频繁使用,如果可能的话,应将其保留在CPU的寄存器中,以加快其存取速度。
对于现有的大多数编译程序,最好不要使用register修饰符。
因为它是对早期低效的C编译程序的一个很有价值的补充。
随着编译程序技术的进步,在决定哪些变量应当被存到寄存器中时,现在的C编译程序能比程序员做出更好的决定。
全局变量在函数之外定义的变量称为外部变量,外部变量是全局变量,它可以为本文件中其他函数所共用。
慕课版的c++课后习题及答案
【16】指出下列哪些是C++语言中合法的变量名? a. x g. total output b. formulal h. aReasonablyLongVariableName c. average_rainfall i. 12MonthTotal d. %correct j. marginal-cost e. short k. b4hand f. tiny l. _stk_depth 【解】这些符号的情况如下表所示。
int num1, num2;
定义三个名为x、y、z的实型双精度变量
double x, y, z;
【8】简单程序通常由哪三个阶段组成? 【解】简单程序通常由输入阶段、计算阶段和输出阶段组成。输入阶段接收用户输入的需要 加工的数据。 计算阶段将输入的数据加工成输出数据。 输出阶段将加工后的数据输出给用户。 在编写程序时,最好在各阶段之间插入一个空行,使程序逻辑更加清晰。 【9】一个数据类型有哪两个重要属性? 【解】 第一个是该类型的数据在内存中是如何表示的, 第二个是这类数据允许执行哪些操作。 【10】两个短整型数相加后,结果是什么类型? 【解】短整型数据在执行算术运算时会先被转换成标准的整型然后执行整型运算,所以两个 短整型的整数相加后的结果是整型。 【11】算术表达式 true + false 的结果是多少?结果值是什么类型的?
个程序就无法运行,因此需要将目标程序和这些工具的目标程序链接在一起后才能运行。 【11】为什么不直接用自然语言和计算机进行交互,而要设计专门的程序设计语言? 【解】自然语言太复杂,而计算机本身(机器语言)的功能又非常简单,如果要将自然语言 作为人机交互的工具,编译器的设计与实现必将非常的复杂。另外,自然语言太灵活,理解 自然语言需要一些背景知识,否则会产生二义性,这也给计算机实现带来了很大的麻烦。 【12】试列举出高级语言的若干优点(相比与机器语言) 。 【解】首先高级语言更接近于自然语言和人们熟悉的数学表示,学起来比较方便。其次高级 语言功能比机器语言强。一般的机器语言只能支持整数加法、移位、比较等操作,而高级语 言能执行复杂的算术表达式、 关系表达式和逻辑表达式。 高级语言可以使程序员在较高的抽 象层次上考虑问题,编程序比较容易。第三,高级语言具有相对的机器独立性,在一台机器 上用高级语言编写的程序可以在另外一台不同厂商生产的计算机上运行, 这使得程序有较好 的可移植性,有利于代码重用。 【13】为什么不同类型的计算机可以运行同一个C++程序,而不同类型的计算机不能运行同 一个汇编程序? 【解】因为不同类型的计算机上有不同的C++编译器,可以将同一个C++程序编译成不同机 器上的机器语言表示的目标程序。 而汇编程序仅是机器语言的另一种表现形式。 不同类型的 计算机有不同的机器语言,也就有不同的汇编语言。 【14】机器语言为什么要用难以理解、难以记忆的二进制比特串来表示指令,而不用人们容 易理解的符号来表示? 【解】因为计算机是由逻辑电路组成的,而0、1正好对应于逻辑电路中的两种电平信号,可 以直接翻译成控制信号,使计算机硬件实现比较容易。如果采用人比较容易理解的符号,如 英文、中文或者数学符号,则计算机需要用硬件将这些符号翻译成控制信号,使硬件设计非 常复杂,甚至无法实现。 【15】为什么电视机只能播放电视台发布的电视,DVD播放机只能播放DVD碟片,而计算机 却既能当电视机用,又能当DVD机用,甚至还可以游戏机用? 【解】电视机只能播放电视台发布的电视,DVD播放机只能播放DVD碟片,这是因为设计时 已经规定好它们的功能。 而计算机有一个开放的平台, 具有学习的功能, 可以允许程序员 “教 会” 它们新的知识和技能。 只要编写了能完成相应功能的程序, 计算机就具备了相应的功能。 【16】说明下面概念的异同点: (1)硬件和软件 (2)算法与程序 (3)高级语言和机器语言 (4)语法错误与逻辑错误 【解】 (1)硬件和软件:计算机的硬件是计算机的“肉体” ,是看得见、摸得着的实体,它只能做 一些非常简单的工作。计算机的软件是计算机的“灵魂” 。 “灵魂”指导“肉体”完成一项项 的工作。当你买了一台计算机后,它的硬件是不变的,但是你可以让它“学习” ,即安装不 同的软件,你的计算机就有了不同的能力。 (2)算法与程序:算法是按照计算机能够完成的基本功能,设计出的解决某一问题的基本 步骤。用某一种程序设计语言描述的算法称为程序。 (3)高级语言和机器语言:机器语言是计算机硬件具备的功能的抽象,高级语言是面向程 序员的语言,比较接近数学表示,使程序容易编写。 (4)语法错误是指程序的表述没有完全符合程序设计语言的语法规范。逻辑错误是指算法 设计过程中的错误或漏洞。 第二章 简答题
变量间知识点总结
变量间知识点总结1. 变量的概念变量是程序中用于存储数据的一种元素,它是程序设计的基本构件之一。
在程序中,变量由一个标识符和一个类型组成,其用来存储特定类型的数据值。
变量的名字用来标识其中存储的数据,类型则用来描述变量可以存放的数据种类。
2. 变量的作用变量主要用来存储和处理程序中的数据。
通过定义不同的变量,程序可以在不同的地方使用这些数据,实现数据的传递和处理。
变量的作用包括存储数据、表示程序状态、在程序执行过程中改变值等。
二、变量的声明与赋值1. 变量声明在程序中,变量需要先声明后才能被使用。
声明变量就是告诉编译器或解释器,在程序中有一个特定类型的变量名为指定的标识符,其中存放着相应类型的数据。
变量的声明一般包括变量名和类型描述两部分,格式为“类型变量名;”2. 变量赋值变量赋值是指给变量赋予特定的值。
在程序执行过程中,变量的值是可以改变的。
变量赋值一般使用赋值操作符“=”进行,例如“变量名 = 值;”。
通过赋值操作,可以改变变量中存储的数据值,实现数据的更新和处理。
三、变量的命名规范1. 变量名的规则变量名是用来标识变量的标识符,它需要符合一定的命名规范。
变量名的规则一般包括以下几点:- 只能由数字、字母和下划线组成- 不能以数字开头- 区分大小写- 不能使用关键字- 不能使用特殊符号2. 变量名的命名规范变量名的命名规范主要包括以下几点:- 采用有意义的名字- 遵守驼峰命名法- 尽量简洁明了- 不要使用拼音- 不要使用特殊符号四、变量的数据类型1. 变量的数据类型变量的数据类型是指变量可以存储的数据种类。
常见的数据类型包括整型、浮点型、字符型、布尔型等。
不同的数据类型具有不同的取值范围和存储规则。
2. 基本数据类型在大多数编程语言中,基本的数据类型包括以下几种:- 整型:用来表示整数,如int、long等- 浮点型:用来表示小数,如float、double等- 字符型:用来表示字符,如char- 布尔型:用来表示真假,如bool3. 复合数据类型除了基本数据类型外,一些编程语言还提供了复合数据类型,如数组、结构体、指针等。
C语言extern的概念(声明和定义的区别)
C语⾔extern的概念(声明和定义的区别)在java语⾔中,没有注意,C语⾔还专门有个关键词 extern来标⽰声明,在这记录⼀下:externadj. 外⾯的;外来的;对外的外部变量的意思最简单的说法:声明就是没有分配值空间定义就是分配了值空间这样说貌似也没错,但⼀些场景有点说不清,⽐如下⾯extern int i;int i;extern int d = 3, f = 5; // d 和 f 的声明与初始化int d = 3, f = 5; // 定义并初始化 d 和 f这两种情况:要么都没有赋值,要么都赋值。
那么这样还有什么意义,有什么区别。
具体来说就是:extern int i; //声明,不是定义int i; //声明,也是定义区别就是定义包括了声明,声明只是声明。
意思就是变量使⽤前都需要声明然后定义,但写法可以⼀步到位(声明就定义),也可分开写(不仅可以在同⼀个⽂件不同地⽅,还可以声明和定义分别在不同⽂件)。
声明的使⽤有两种情况:1、⼀种是声明需要建⽴存储空间的。
例如:int a 在声明的时候就已经建⽴了存储空间。
2、另⼀种只声明不需要建⽴存储空间的,通过使⽤extern关键字声明变量名⽽不定义它。
例如:extern int a,其中变量 a 可以在别的⽂件中定义的。
除⾮有extern关键字,否则都是变量的定义。
int i;这种写法和java⼀样都是,⾸先编译器初始化(分配空间值为0),再有赋值语句,就修改内存空间的值。
extern int d = 3, f = 5; // d 和 f 的声明与初始化int d = 3, f = 5; // 定义并初始化 d 和 f个⼈理解这两种的区别:extern int d = 3, f = 5; 分配空间的直接赋值。
int d = 3, f = 5;分配空间先指定⼀个默认值再赋值。
补充:初始化的意思有两种情况1,定义时指定值,第⼀次主动赋值。
c 变量定义规则
c 变量定义规则摘要:一、变量定义规则简介二、变量命名规则1.变量名的组成2.变量名的首字符限制3.变量名的长度限制4.变量名的命名规范三、变量类型及声明1.变量类型2.变量声明四、变量的赋值与使用1.变量的赋值2.变量的使用五、变量的作用域与生命周期1.变量的作用域2.变量的生命周期六、变量的注意事项1.变量使用中的错误2.变量的特殊处理正文:在编程中,变量是用于存储数据的重要概念。
为了保证程序的可读性和可维护性,我们需要遵循一定的规则来定义和使用变量。
本文将详细介绍C 语言中的变量定义规则。
一、变量定义规则简介变量定义规则主要包括变量命名规则、变量类型及声明、变量的赋值与使用、变量的作用域与生命周期等方面。
二、变量命名规则1.变量名由字母、数字和下划线组成,但不能以数字开头。
2.变量名的首字符不能是保留字,如if、else、while 等。
3.变量名的长度不能超过31 个字符。
4.变量名应遵循驼峰命名法,即多个单词组合在一起时,每个单词的首字母大写,除了第一个单词。
三、变量类型及声明1.变量类型包括整型、浮点型、字符型、指针型等。
2.变量声明指定变量的类型,如int a;声明一个整型变量a。
四、变量的赋值与使用1.变量赋值是将一个值分配给一个变量。
例如:int a = 10;表示将整数10 赋值给变量a。
2.变量使用是在程序中引用变量的值。
例如:printf("%d", a);表示输出变量a 的值。
五、变量的作用域与生命周期1.变量的作用域是指变量在程序中可访问的范围。
局部变量只能在声明它的函数内访问,全局变量则可以在整个程序范围内访问。
2.变量的生命周期是指变量在程序运行过程中的存在时间。
局部变量的生命周期从声明开始,直到函数结束;全局变量的生命周期从程序启动,直到程序结束。
六、变量的注意事项1.变量使用中的错误包括类型不匹配、变量未声明、变量名拼写错误等,应尽量避免。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
变量声明和定义的区别
我们在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的把他们的区别介绍如下:(望我的指点对你受益)
变量的声明有两种情况:
1、一种是需要建立存储空间的。
例如:int a 在声明的时候就已经建立了存储空间。
2、另一种是不需要建立存储空间的。
例如:extern int a 其中变量a是在别的文件中定义的。
前者是“定义性声明(defining declaration)”或者称为“定义(definition)”,而后者是“引用性声明(referncing declaration)”,从广义的角度来讲声明中包含着定义,即定义是声明的一个特例,所以并非所有的声明都是定义,例如:int a 它既是声明,同时又是定义。
然而对于extern a 来讲它只是声明不是定义。
一般的情况下我们常常这样叙述,把建立空间的声明称之为“定义”,而把不需要建立存储空间的声明称之为“声明”。
很明显我们在这里指的声明是范围比较窄的,即狭义上的声明,也就是说非定义性质的声明,例如:在主函数中:
int main() {
extern int A;
//这是个声明而不是定义,声明A是一个已经定义了的外部变量
//注意:声明外部变量时可以把变量类型去掉如:extern A;
dosth(); //执行函数
}
int A; //是定义,定义了A为整型的外部变量
外部变量的“定义”与外部变量的“声明”是不相同的,外部变量的定义只能有一次,它的位置是在所有函数之外,而同一个文件中的外部变量声明可以是多次的,它可以在函数之内(哪个函数要用就在那个函数中声明)也可以在函数之外(在外部变量的定义点之前)。
系统会根据外部变量的定义(而不是根据外部变量的声明)分配存储空间的。
对于外部变量来讲,初始化只能是在“定义”中进行,而不是在“声明”中。
所谓的“声明”,其作用,是声明该变量是一个已在后面定义过的外部变量,仅仅是为了“提前”引用该变量而作的“声明”而已。
extern 只作声明,不作任何定义。
(我们声明的最终目的是为了提前使用,即在定义之前使用,如果不需要提前使用就没有单独声明的必要,变量是如此,函数也是如此,所以声明不会分配存储空间,只有定义时才会分配存储空间。
)
用static来声明一个变量的作用有二:
(1)对于局部变量用static声明,则是为该变量分配的空间在整个程序的执行期内都始终存在。
(2)外部变量用static来声明,则该变量的作用只限于本文件模块。