C++语言基础

一、变量的存储类型:

1.auto:auto称为动态变量(局部变量)。局部变量是指在函数内部说明的变量(有时也称为自动变量)。默认情况下的局部变量均属于auto变量。局部变量在函数调用时自动产生,但不会自动初始化,随函数调用的结束,这个变量也就自动消失了。下次调用此函数时再自动产生,还要再赋值,退出时又自动消失。
2.static:static称为静态变量。根据变量的类型可以分为静态局部变量和静态全局变量。

     1. 静态局部变量:它与局部变量的区别在于:在函数退出时,这个变量始终存在,但不能被其它函数使用;当再次进入该函数时,将保存上次的结果。其它与局部变量一样。

     2. 静态全程变量:只在定义它的源文件中可见而在其它源文件中不可见的变量。它与全局变量的区别是:全局变量可以被其它源文件使用,而静态全局变量只能被所在的源文件使用。
3.extern:extern称为外部变量。为了使变量除了在定义它的源文件中可以使用外,还可以被其它文件使用。因此通知每一个程序模块文件,此时可用extern来说明。
4.register:register称为寄存器变量。它只能用于整型和字符型变量。定义符register说明的变量被存储在CPU的寄存器中,定义一个整型寄存器变量可写成: register int a;
      对于以上四种数据的存储位置:register变量存在CPU的寄存器中;auto类型变量存在内存的栈;static型的局部变量和全局变量以及extern型变量(即全局变量),存在于内存的静态区。

二、数据类型

ANSI C/C++基本数据类型:

Type

Size

数值范围

无值型void

0 byte

无值域

布尔型bool    

1 byte

true   false

有符号短整型short [int] /signed short [int]

2 byte

-32768~32767

无符号短整型unsigned short [int]  

2 byte

0~65535

有符号整型int /signed [int]

4 byte

-2147483648~2147483647

无符号整型unsigned [int]

4 byte

0~4294967295

有符号长整型long [int]/signed long [int]

4 byte

-2147483648~2147483647

无符号长整型unsigned long [int]

4 byte

0~4294967295

long long

8 byte

0~18446744073709552000

有符号字符型char/signed char

1 byte

-128~127

无符号字符型unsigned char

1 byte

0~255

宽字符型wchar_t (unsigned short.)

2 byte

0~65535

单精度浮点型float 

4 byte

-3.4E-38~3.4E+38

双精度浮点型double

8 byte

1.7E-308~1.7E+308

long double

8 byte

三、文件类型

1.二进制文件:二进制文件是按二进制的编码方式来存放文件的。 例如, 数5678的存储形式为: 00010110 00101110只占二个字节。

2.文本文件:ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。例如,数5678的存储形式为:

        ASC码:  00110101 00110110 00110111 00111000
                ↓        ↓       ↓         ↓
         十进制码:        5     6       7      8 

四、指针和引用

1.从现象上看:指针在运行时可以改变其所指向的值,而引用一旦和某个对象绑定后就不再改变
2.从内存分配上看:程序为指针变量分配内存区域,而引用不分配内存区域
3.从编译上看:程序在编译时分别将指针和引用添加到符号表上,符号表上记录的是变量名及变量所对应地址。指针变量在符号表上对应的地址值为指针变量的地址值,而引用在符号表上对应的地址值为引用对象的地址值。符号表生成后就不会再改,因此指针可以改变指向的对象(指针变量中的值可以改),而引用对象不能改。

五、位运算

1.& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0
2.| 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1
3.^ 按位异或 若参加运算的两个二进制位值相同则为0,否则为1
4.~ 取反 ~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0
5.<< 左移 用来将一个数的各二进制位全部左移N位,右补0
6.>> 右移 将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0

关于“异或”运算符(^)应用

(1)使特定位翻转
设有数01111010(2),想使其低4位翻转,即1变0,0变1.可以将其与00001111(2)进行“异或”运算,即:

   01111010
^ 00001111
   01110101
运算结果的低4位正好是原数低4位的翻转。可见,要使哪几位翻转就将与其进行∧运算的该几位置为1即可。

(2)与0相“异或”,保留原值
例如:012^00=012
        00001010
       ^00000000
        00001010
因为原数中的1与0进行异或运算得1,0^0得0,故保留原数。
(3) 交换两个值,不用临时变量
例如:a=3,即11(2);b=4,即100(2)。
想将a和b的值互换,可以用以下赋值语句实现:
    a=a∧b;
    b=b∧a;
    a=a∧b;
a=011(2)
    (∧)b=100(2)
a=111(2)(a∧b的结果,a已变成7)
    (∧)b=100(2)
b=011(2)(b∧a的结果,b已变成3)
    (∧)a=111(2)

a=100(2)(a∧b的结果,a已变成4)
等效于以下两步:
    ① 执行前两个赋值语句:“a=a∧b;”和“b=b∧a;”相当于b=b∧(a∧b)。
    ② 再执行第三个赋值语句: a=a∧b。由于a的值等于(a∧b),b的值等于(b∧a∧b),

因此,相当于a=a∧b∧b∧a∧b,即a的值等于a∧a∧b∧b∧b,等于b。


六、new 和 delete

p = new type;             //只分配堆内存

p = new type(x);       //分配内存并初始化为x

p = new type[n];      //分配具有n个元素的数组

delete   p;             //释放单个变量所占用的内存

delete   [ ]p;         //释放数组所占用的内存

posted @ 2011-09-02 11:09  stdtrekman  阅读(323)  评论(0编辑  收藏  举报