通过这几天的看书,越来越觉得只有静下心来才能真正的读进去,尤其看编程的C++语言,以前总觉得只要会一些就可以了,拉下了许多,都是一知半解,重新仔细了解C++的一些基本概念,感觉自己要坚定好好学习这门课程,为将来的数据结构奠定一个好的基础。今天就把这两天的一些基础知识做一下梳理和总结。
一变量的类型(主要梳理存储类)
变量的类型包含数据类型和存储类,一般我们都知道数据类型,我就是遗忘了变量的存储类,一旦涉及,我就不清楚了。存储类分为四种:auto(自动类),register(寄存器类),extern(外部类),static(静态类,包含内部静态类和外部静态类)。
auto:说明符可以省略,作用域在定义它的函数体内或分程序中的局部变量
register:说明符不可省略,作用域在定义它的函数体内或分程序中的局部变量,一般只能用int型变量和char型变量。
以上两种变量类型在作用域内是可见的,存在的;退出后则不可见,也不存在。因此这两类变量可见性和存在性是一致的。此外,它们在定义或说明后没有默认值,只有被初始化或赋值后才可使用。
extern:外部类变量的定义和说明是两回事。只能定义一次,但可以说明多次。定义时,不需要加说明符,只要写在函数体外就可以了。说明时,必须加说明符extern。如果先引用,后定义,引用时必须说明;如果先定义,后引用,则不必说明。外部类变量被定义后,有默认值,char型变量为空,int型变量为0,浮点型变量为0.0。外部类变量的作用域最大,是整个程序,它的可见性和存在性是一致的。
static;说明符不可省略,静态类分为内部静态类和外部静态类。内部静态类的作用域在定义它的函数体内或分程序中,它的可见性和存在性不一致,超出作用域后不可见但存在。外部静态类的作用域介于外部类和内部静态类之间,在定义或说明它的文件中国。它的可见性和存在性也是不一致的。静态类被定义或说明后有默认值,char型变量为空,int型变量为0,浮点型变量为0.0。两者区别在于前者定义在函数体内或分程序中,后者定义在函数体外。
二赋值和赋初值
赋值:变量被定以后,使用赋值表达式语句来使变量重新获取值。例如;
int a;
a=1;
赋初值:在说明语句中,定义变量的同时,使变量获取值。例如:
double b=2;
三变量值和变量地址值
变量值是变量存放在内存单元中的内容,它是该变量的数据值,直接引用该变量名就是使用该变量的数据值。例如:int a=1,1就是变量值。
变量地址值是存放该变量的内存的地址值,一个变量的地址值蓓表示在该变量名前加上运算符“&”。例如:int a=1,&a就是变量地址值。
三字符常量和字符串常量
字符常量:用单撇号表示,如‘a',在内存中存放时所占空间是1字节,在一定的范围内可以与整型数进行加法或减法运算(char d1='B';cout<<d1+1<<endl;运行程序时输出值为67.)字符变量可存放一个字符常量。
字符串常量:用双撇号表示,如“a",在内存中存放时所占空间是2字节(除了存放ASCII码值还要存放'\0',它也占1字节),字符串常量不具备运算功能(char sl[]="abcdef‘;cout<<sl+2<<endl;运行程序时输出的是cdef),它需要存放在字符串数组中。
四字符数组存放的是字符还是字符串
两者的区别在于数组元素中是否有字符串的结束符('\0')。
char s1[3]={'a','b','c'} 存放的是字符
char s2[4]={'a','b','c','\0'} 存放的是字符串,因此char s2[4]="abc"。如果要对字符数组赋值时应对每一个元素进行赋值,不能用一个字符串常量直接赋值。(char s3[4];
s3[4]="abc";这种赋值是非法的,正确的应该为char s3[4];s3[0]='a';s3[1]='b';s3[2]='c';s3[3]='\0';)
五对于一个字符常量来讲,什么情况输出字符符号,什么情况输出字符的ASCII码值。
对此情况我编写了一个小程序:
对于第一种情况输出ASCII码值(需要和数字进行运算);
对于第二三种情况输出字符符号。
六关于字符串长度和字节数的求法
一开始遇到这种类型的题目毫无头绪,现在明白了。
对于"ab\\\'cdef\n"这个字符串的长度为9(1'a'2'b'3'\\'4'\''5'c'6'd'7'e'8'f'9'\n'),占10字节。(加上10'\0')。字节的大小始终比长度多1.
对于这种情况编写程序: