1.数组被称为符合类型,是因为它是基于其他类型来构建的,数组中指定元素个数的值必须编译时能确定的值,比如整形常数,const值,常量表达式
2.程序员必须保证数组使用有效的下标值,因为编译器不会去检查下标是否有效
3.C++翻译器不是真正的编译器,它是将C++翻译成C再用C编译器进行编译,它只是一种转换器
4.int a[10] = {0}将所有的值都初始化为0, int a[10] = {1}将a[0]初始化为1,其他为0
5.C-style string:以空字符'/0'结尾的字符串
char[10] = "i love you".此处字符串常量(字符串字面值)隐式的包含空字符,不必手动添加,所以"S"包含两个字符,而"S"实际表示的是这个字符串常量的地址,所以char a = "S"错得离谱
6.sizeof操作符计算整个数组的长度,将'/0'也包含在内,而strlen()函数不包含'/0',也就是说它只计算可见字符
7.cin使用空白符来定界
char a[10];
cin >> a;
则当键入abc de时,数组a中实际存储的是"abc","de"留在输入缓冲区中,这种特性可能迫使我们可能需要使用getline(),即面向行的输入
char a[10]
cin >> cin.getline(a,10),它通过换行符来确定行尾且不保存换行符,也就是说,它用空字符来替换换行符
char a[10]
cin.get(a,10)也是面向行当输入,但是它不丢弃换行符,而是将其留在输入队列中,所以我们可能需要cin.get()来读取换行符,这个调用时功能是读取下一个字符。我们可以这样写cin.get(a,10).get()
8.当输入的字符比分配的长度更长,则余下的字符会留在输入队列中
getline使得操作更加简便,get使得检查错误更加容易
9.混合输入字符串和数字可能会出现问题,比如下列程序片段
int a;
char b[10];
cin >> a;
正确的写法应该是
int a;
char b[10];
cin >> a;
cin.get();
cin.getline(b,10)
cin.getline(b,10)会将输入a时留在输入队列中的换行符经过替换成空字符后输入到b中
10.string提供了将字符串作为一种数据类型的表示方法,string类包含在名称空间std中;
char数组是一组用来存储字符串的存储单元,string类变量是一个表示字符串的实体;
不能将C库中的C字符串函数用于string对象;
当需要读取一行而不是一个单词时,需要做如下处理:
getline(cin,str),这里的getline不是istream类中的一个方法,istream类中没有处理string的方法
所以需要特别注意下列程序片段的注释的区别
int a;
string b;
cin >> a; //这里使用的是istream类中的一个方法
cin >> b; //这里使用的是string类的一个友员函数
11.在C++中,允许在声明结构变量时去掉关键词struct,这种与C中做法的不同强调了在C++中,结构声明定义了一种新的数据类型
12.有些编译器(如VC,BC)不支持将string类作为结构成员
13.在结构体中使用位字段,可以创建与某个硬件设备上的寄存器对应的数据结构。位字段一般用在低级编程中