cpp(第四章)

时间:2022-01-07 17:16:26

1.索引比数组长度少1;

2.c++中不能数组赋给另一个数组;只能定义时才能使用初始化;

3.c++11中{}内为空,默认赋值为0,而c++中{}如果只对部分初始化,其他部分将被设置为0;c++11使用{}不能把大类型转化小类型(缩窄转化)

for example float change int;

4.字符串和字符常量,字符常量是字符串编码简写表示,在ascii系统上,如‘S’只是83的另一种写法,而字符串它表示的是N个字符和‘\0’组成的字符串,更糟糕的是

“XXX”实际是上表示的是字符串所在的内存地址。

5.strlen()只计算可见的字符,而不把空字符计算在内。

6.cin使用空白(空格,制表符和换行符)来确定字符串的结束位置。(string)

7.cin.getline()和cin.get(),输入的时候getline会将随后的换行符丢弃,而get将换行符保留在输入序列中(缓存中);在参数中读取的字符个数,函数实际读取

少1,因为需要在结尾处添加空字符;老式实现中没有getline(),get()使输入更仔细,for example 假设用get()将一行读入数组中,如何知道停止读取的

原因是由于已经读取了整行,而不是由于数组已经填满呢?查看下一个输入符,如果是换行符,说明已经读取整行,否则该行中还有其他输入;get()在读取到空

行后将设置失效位(failbit),这意味着接下来的输入将被阻断,可以用cin.clear()清除状态,但空行符还是在缓冲中,需要get(void)吃掉,而getline()在输入

字符串比分配空间长时,会设置失效位,并关闭后面的输入。

8.string类 对象赋值给另一个string对象,被赋值对象的字符串指针指向赋值对象字符串;符字符串常量则重新动态分配空间。(引用计数)

9.使用strcat()函数时要注意接收方所能接收数组的最大数组长度,超过将覆盖相邻的内存(可能导致程序终止,也可能程序继续运行但数据被损坏)。

10.sizeof:The sizeof operator shall not be applied to an expression that has function type or anincomplete type, to the parenthesized

name of such a type, or to an expression thatdesignates a bit-field member。

sizeof为运算符,不能用于函数,既可以在编译期间确定值也可以在运行期间确定值。

11.指针创建时不会自动初始化为nullptr,它的缺省值是随机的,胡乱指向。因此当指针创建时应被初始化或者置为nullptr。

12.指针变量被释放后还是指向原来的位置,只是所指向的内存已经被释放不能使用(野指针),应置为nullptr,防止错误操作。

13.指针和数组区别之一是,可以修改指针的值(++||——)而数组名是常量,另一个区别是sizeof(数组)得到的 是数组的长度,而sizeof(指针)得到的是

保持指针地址数据类型大小。

14.数组的地址short tell_short[10];cout<<tell<<endl<<&tell;数组名被解释为其第一个元素的地址而对数组名用&(取地址符号)是得到的是整个数组的地址,

tell+1 将地址值加上2而&tell+1将地址值加20.

15.cout,如果给cout提供一个字符的地址,则它将从该字符开始打印,直到遇到空字符为止。cout会自动跟踪类型,char变量只会输出一个字符,而字符串则会

直到遇到空字符为止。

16.整型指针,浮点型指针,cout<<指针,输出地址。cout<<*指针,输出变量值;字符型指针,cout<<指针,输出字符,cout<<(int*)指针,输出地址。

16.1一般来说,如果给cout提供一个指针,它将打印地址,但如果指针的类型为char*则cout将显示指向的字符串。如果要显示的是字符串的地址则必须将这种

指针强制转换为另一种指针的类型,如果int*。

17.strcpy(目标地址,要复制的字符串地址),目标内存小于字符串则剩余的部分复制到数组后面的内存字节中,这可能会覆盖程序正在使用的其他内存。

18.strncpy(目标地址,要复制的字符串地址,要复制的最大字符数),如果该函数在到达字符串结尾之前,目标的内存已经用完,则它不会添加空字符。

19.cin.getline(char*,int) AND cin.get(char*,int) 只读取到n-1位字符,最后一位补空白符