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 truefalse
有符号短整型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; //释放数组所占用的内存

原文链接: https://www.cnblogs.com/armstrong-cn/archive/2011/09/02/2163493.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/31582

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 上午8:53
下一篇 2023年2月8日 上午8:54

相关推荐