基础知识复习一(Jun18)

·        变量的声明和定义

ü  声明是向编译器介绍名字--标识符。它告诉编译器“这个函数或变量在某处可找到,它的模样象什么”。

ü  告诉编译器,这个名字已经匹配到一块内存上,下面的代码用到变量或者对象是在别的地方定义的;告诉编译器,这个名字已经被预定了,别的地方再也不能用它来作为变量名或对象名。

ü  定义就是(编译器)创建一个对象,为这个对象分配一块内存,并给它取上一个名字,这个名字就是就是我们经常所说的变量名或对象名。

ü  定义创建对象并为这个对象分配了内存,声明没有分配内存。

ü  为什么要区分变量的声明和定义?主要是为了让多个文件可以访问同一个变量。

ü  一个变量的定义会为变量分配存储空间,也有可能同时为其提供初始值。

ü  声明则仅给出变量的数据类型和变量名称。

ü  变量的定义肯定也是变量的声明,反之则未必。

ü  在作用域内,变量的定义有且仅有一个,声明则可以有多个。

ü  有extern的时候,两者的情况区分:

 extern int i;    // 声明而不是定义,因为不分配存储空间。

extern int i = 1; //定义,因为分配了存储空间

ü  函数只有函数头是声明,有函数体是定义。

ü  类永远只是声明,类成员函数的函数体是定义。

ü  变量(非成员变量)和对象不加extern永远是定义。

ü  类中成员变量是声明。

·        全局变量:

ü 全局变量也称为外部变量,它是在函数外部定义的变量。 它不属于哪一个函数,它属于一个源程序文件。其作用域是从定义该变量的位置开始至源文件结束。

ü 变量存储在全局数据区

ü  int a =0;//定义一个全局变量a,并给初值<===> extern int a = 0;

ü  extern int a;//声明一个全局变a

int a; //定义一个全局变量a

ü  当全局变量已经定义了,在其他文件中引用这个全局变量的时候,需要在新源文件用extern int a;申明一下。

·        extern:

ü  extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。需要用extern + 变量名或函数名加以申明。

ü  用来进行链接指定。C++环境下使用C函数的时候,常常会出现编译器无法找到obj模块中的C函数定义,从而导致链接失败的情况。C++语言在编译的时候为了解决函数的多态问题,会将函数名和参数联合起来生成一个中间的函数名称,而C语言则不会,因此会造成链接时找不到对应函数的情况,此时C函数就需要用extern “C”进行链接指定,这告诉编译器,请保持我的名称,不要给我生成用于链接的中间函数名。

·        Static:

ü  设定了数据的存储域:Static 局部变量存储在静态数据区,而普通局部变量存储在栈。Static 局部变量的作用域是从定义处开始,到程序结束; 普通变量是从定义去开始,到函数结束。

ü  限定了数据的作用域:Static 全局变量或函数,限定了他们的作用域只在本文件内。外部文件是无法看到的。所以可以在其他文件中定义相同的变量或函数。

ü  全局变量可以定义在可被多个.C文件包含的头文件中。在不同的C文件中以static形式来声明同名全局变量。可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错。

ü  static函数与普通函数作用域不同,仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文

ü  静态数据成员/成员函数:表示属于一个类而不是属于此类的任何特定对象的变量和函数。

ü  对于非静态数据成员,每个类对象都有自己的拷贝。而静态数据成员被当作是类的成员。无论这个类的对象被定义了多少个,静态数据成员在程序中也只有一份拷贝,由该类型的所有对象共享访问。也就是说,静态数据成员是该类的所有对象所共有的。对该类的多个对象来说,静态数据成员只分配一次内存,供所有对象共用。所以,静态数据成员的值对每个对象都是一样的,它的值可以更新。

ü  静态数据成员存储在全局数据区。静态数据成员定义时要分配空间,所以不能在类声明中定义。在Example 5中,语句intMyclass::Sum=0;是定义静态数据成员。

ü  静静态数据成员初始化与一般数据成员初始化不同。静态数据成员初始化的格式为:

ü  <数据类型><类名>::<静态数据成员名>=<值>态数据成员和普通数据成员一样遵从public,protected,private访问规则。

ü  类的静态数据成员有两种访问形式:

ü  <类对象名>.<静态数据成员名><类类型名>::<静态数据成员名>

ü  如果静态数据成员的访问权限允许的话(即public的成员),可在程序中,按上述格式来引用静态数据成员。

ü  静态数据成员主要用在各个对象都有相同的某项属性的时候。

ü  静态成员函数,它为类的全部服务而不是为某一个类的具体对象服务。静态成员函数与静态数据成员一样,都是类的内部实现,属于类定义的一部分。普通的成员函数一般都隐含了一个this指针,this指针指向类的对象本身,因为普通成员函数总是具体的属于某个类的具体对象的与普通函数相比,静态成员函数由于不是与任何的对象相联系,因此它不具有this指针。从这个意义上讲,它无法访问属于类对象的非静态数据成员,也无法访问非静态成员函数,它只能调用其余的静态成员函数

ü  类体外的静态数据成员定义和静态成员函数定义时不需要加static。

ü  静态成员之间可以相互访问,包括静态成员函数访问静态数据成员和访问静态成员函数非静态成员函数可以任意地访问静态成员函数和静态数据成员静态成员函数不能访问非静态成员函数和非静态数据成员; 调用静态成员函数,可以用成员访问操作符(.)(->)为一个类的对象或指向类对象的指针调用静态成员函数,也可以直接使用如下格式:

<类名>::<静态成员函数名>(<参数表>)

·        Register 

ü register称为寄存器变量。它只能用于整型和字符型变量。定义符register说明的变量被Turbo C2.0存储在CPU的寄存器中, 而不是象普通的变量那样存储在内存中, 这样可以提高运算速度。但是Turbo C2.0只允许同时定义两个寄存器变量,一旦超过两个, 编译程序会自动地将超过限制数目的寄存器变量当作非寄存器变量来处理。因此, 寄存器变量常用在同一变量名频繁出现的地方。 

ü  寄存器变量只适用于局部变量和函数的形式参数, 它属于auto型变量因此, 不能用作全程变量。定义一个整型寄存器变量可写成register int a; 

·        引用和指针的区别 

ü  引用必须初始化,而指针不必须。

ü  引用初始化后不能改变,而指针可以改变。

ü 引用不能赋值为空,而指针可以。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值