变量的声明和定义之间的区别和联系(精)
- 格式:doc
- 大小:35.50 KB
- 文档页数:2
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语言面试题目及最佳答案1、描述⼀下gcc的编译过程?gcc编译过程分为4个阶段:预处理、编译、汇编、链接。
预处理:头⼀件包含、宏替换、条件编译、删除注释编译:主要进⼀词法、语法、语义分析等,检查⼀误后将预处理好的⼀件编译成汇编⼀件。
汇编:将汇编⼀件转换成⼀进制⼀标⼀件链接:将项⼀中的各个⼀进制⼀件+所需的库+启动代码链接成可执⼀⼀件2、内存的最⼀存储单位以及内存的最⼀计量单位分别是?内存的最⼀存储单位为⼀进制位,内存的最⼀计量单位字节3、#include<> 与#include ""的区别?include<>到系统指定⼀录寻找头⼀件,#include ""先到项⼀所在⼀录寻找头⼀件,如果没有找再到系统指定的⼀录下寻找4、描述⼀下变量的命名规则变量名有字⼀、数值、下划线组成,但不能以数值开头5、变量的声明与定义有啥区别?声明变量不需要建⼀存储空间,变量的定义需要建⼀存储空间6、谈谈c语⼀中有符号和⼀符号的区别?有符号:数据的最⼀位为符号位,0表示正数,1表示负数⼀符号:数据的最⼀位不是符号位,⼀是数据的⼀部分7、谈谈计算机中补码的意义统⼀了零的编码将符号位与其他位统⼀处理将减法运算转换成加法运算8、谈谈数组的特点同⼀个数组所有的成员都是相同的数据类型,同时所有的成员在内存中的地址是连续的9、数组的分类数组的分类主要是:静态数组、动态数组两类。
静态数组:类似int arr[5];在程序运⼀就确定了数组的⼀⼀,运⼀过程不能更改数组的⼀⼀。
动态数组:主要是在堆区申请的空间,数组的⼀⼀是在程序运⼀过程中确定,可以更改数组的⼀⼀。
10、描述⼀下⼀维数组的不初始化、部分初始化、完全初始化的不同点不初始化:如果是局部数组数组元素的内容随机如果是全局数组,数组的元素内容为0 部分初始化:未被初始化的部分⼀动补0完全初始化:如果⼀个数组全部初始化可以省略元素的个数数组的⼀⼀由初始化的个数确定11、谈谈数组名作为类型、作为地址、对数组名取地址的区别?数组名作为类型:代表的是整个数组的⼀⼀数组名作为地址:代表的是数组⼀元素的地址对数组名取地址:代表的是数组的⼀地址12、谈谈你对⼀维数组在物理上以及逻辑上的数组维度理解⼀维数组在逻辑上是⼀维的,在物理上是⼀维的13、描述⼀下函数的定义与函数的声明的区别函数定义:是指对函数功能的确⼀,包括指定函数名、函数类型、形参及其类型、函数体等,它是⼀个完整的、独⼀的函数单位。
关于C++的变量和类的声明和定义什么是变量?变量或者叫对象,是⼀个有具名的、可以供程序操作的存储空间。
这⾥具名是指变量是有名字的,可供操作是指能进⾏加减乘除或者输⼊输出等操作,存储空间则是指有⼀块属于它的内存空间。
为了便于说明,标题和后⾯的内容将对象分为两种。
对于内置的,⽂章称作为变量,对于⾃定义的,称之为对象。
第⼀个问题:在C++中,什么是定义,什么是声明?①定义:⽤于为变量分配存储空间,还可为变量指定初始值。
在程序中,变量有且仅有⼀个定义。
②声明:⽤于向程序表明变量的类型和名字。
在程序中,变量可以有多个声明。
定义也是声明:当定义变量时我们声明了它的类型和名字。
上⾯的这些内容很容易理解,很多情况下,定义就是声明,由于C++⽀持分离式编译,因此⼀个C++程序允许别分成许多块,由这些块共同组成完整的程序。
既然程序可以分成多块,那么如果要在所有块之间共⽤⼀个变量,那就要能够在这些块之间共享代码。
为了⽀持这种分离式编译机制,C++中就将声明和定义区分开来了。
第⼆个问题:定义也是声明,那么如果仅仅声明?回答这个问题之前,需要了解什么是作⽤域,这⾥假定你已知晓C++的作⽤域知识。
在需要声明⼀个变量之前,先想⼀想为什么需要声明变量?因为程序需要使⽤定义在别处(通常是别的⽂件中)的变量。
这⾥使⽤别处的变量暗含了⼀个意义,这个变量应当是个全局变量,因为当前作⽤域找不到,所以需要去别的地⽅找,⽽别的地⽅定义的变量应当全局变量,能够被我看到(这⾥只考虑全局变量,其他情况暂不考虑)。
既然变量已经在别的地⽅定义过了,⽽且变量有且仅有⼀个定义,那么我不能再次定义⽽只能声明了,如何声明?声明的⽅式是使⽤extern关键词,形如extern int i,这⾥有了关键词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(),你调⽤的代码必须在函数定义之后。
其实上⾯的要点只在于⼀句话:使⽤变量之前必须声明,声明可以有多次,⽽定义只能有⼀次。
变量定义和相关知识点总结在计算机程序设计及编程语言中,变量是用来存储数据值的一种标识符或者名称,其值是可以在程序执行过程中改变的。
变量的定义和使用是编程中的基础知识之一,对于程序设计者来说,熟练掌握变量的定义和使用是非常重要的。
变量的定义在编程语言中,变量通常是由一个标识符(identifier)来表示。
一个标识符是一个被程序程序员起来的名字,用来标识一个变量、函数或其它用户定义的项目。
在定义变量时,需要指定变量的类型,以及所要存储的初始值。
在不同的编程语言中,变量的命名规则,定义方式以及类型限制都有所不同,但是基本的思想是一致的。
变量的类型在大多数的编程语言中,变量的类型是需要进行指定的。
不同的变量类型具有不同的数据存储方式和数据范围,其定义和使用方式也有所不同。
以下是一些常见的变量类型:整型(int):整数类型变量用来存储整数值,其范围和存储方式取决于编程语言的不同。
在大多数编程语言中,整型变量可以存储的范围是固定的,例如在C语言中,通常是在-32768到32767之间。
浮点型(float):浮点型变量用来存储实数值,其范围和精度取决于编程语言的不同。
在大多数编程语言中,浮点型变量通常都是可变的,可以存储很大或者很小的数值,并具有一定的小数精度。
字符型(char):字符型变量用来存储字符值,通常是一个ASCII码或者Unicode码值。
在大多数编程语言中,字符型变量的长度通常是固定的,例如在C语言中,通常是一个字节大小。
字符串型(string):字符串型变量用来存储字符串值,即由若干个字符组成的数据。
在大多数编程语言中,字符串型变量的长度是可变的,可以存储任意长度的字符串。
布尔型(bool):布尔型变量用来存储逻辑值,即真(true)或者假(false)。
以上是一些常见的变量类型,不同的编程语言可能还有其它的变量类型。
在使用变量时,需要根据实际的需求选择合适的变量类型,以避免浪费内存空间或者数据类型不匹配的问题。
C++基础笔试题及答案在C++中函数可以使用缺省参数。
下面就由店铺为大家介绍一下C++基础笔试题及答案的文章,欢迎阅读。
C++基础笔试题及答案篇11.编写my_strcpy函数,实现与库函数strcpy类似的功能,不能使用任何库函数;答:char *strcpy(char *strDest, const char *strSrc){if ( strDest == NULL || strSrc == NULL)return NULL ;if ( strDest == strSrc)returnstrDest ;char *tempptr = strDest ;while( (*strDest++ = *strSrc++) != ‘’);returntempptr ;}2. 头文件中的ifndef/define/endif的作用?答:防止该头文件被重复引用。
3. #i nclude与#i nclude “file.h”的区别?答:前者编译器从标准库路径开始搜索file.h,而后者编译器从用户的工作路径开始搜索file.h。
4. 在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern“C”?答:extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,其声明的函数和变量可以在本模块或其它模块中使用。
通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明。
5. 面向对象的三个基本特征,并简单叙述之?答:1)封装:将客观事物抽象成类,每个类对自身的数据和方法实行protection(private, protected,public)2)继承:实现继承(指使用基类的属性和方法而无需额外编码的能力)、可视继承(子窗体使用父窗体的外观和实现代码)、接口继承(仅使用属性和方法,实现滞后到子类实现)。
3)多态:允许将子类类型的指针赋值给父类类型的指针。
Java全局变量声明与定义JAVA全局变量(或称成员变量)可分两种,⼀种是静态变量,另⼀种是实例变量,即在类体中定义的变量,有三点得注意:⼀、成员变量不能在类体中先声明(定义)后赋值,但静态变量可以先在类体中声明,然后在⽅法中赋值(当然实例变量是不⾏的);1)如以下程序会出问题:1public class Test { static int a; //在类体中声明整型静态变量a。
int b; //在类体中声明整型实体变量b。
a=3; //在类体中对静态变量a赋初值。
b=5; //在类体中对实体变量b赋初值。
public static void main(String[] args) { System.out.println("a+b="+(a+b)); }}java中全局变量为什么不能先声明再赋值?public class Test{ int b; b=5;}为什么这种先声明后赋值是错误?什么机制导致的?那是因为 i=3这是赋值语句,不能单独出现在⽅法或{}以外的地⽅改成public class Test{ int i; {i = 3;} //写在{}⾥就可以了(这种代码块优先于构造⽅法执⾏)}2)以下程序可以运⾏:public class Test { static int a; //在类体中声明整型静态变量a。
public static void main(String[] args) { a=3; //在⽅法中对静态变量a赋值。
System.out.println("a="+a); }}3)以下程序也不可以运⾏,会报错:public class hello { int a; //在类体中声明整型实体变量a。
public static void main(String[] args) { a=3; //在⽅法中对实体变量a赋值。
System.out.println("a="+a); }}⼆、成员变量可以在类体中声明同时进⾏赋值,如静态变量:static int a=3; 实例变量:int b=5;如:public class Test { static int a=3; //在类体中声明整型静态变量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; //声明类型,同样写两句⼀模⼀样的不会错!但是类型定义也只能⼀次。
变量的声明和定义之间的区别和联系
前者是“定义性声明(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来声明,则该变量的作用只限于本文件模块。