关于指针和引用:
对理解引用的一句很形象准确的话,引用是一个对象别名,它是一个名字而不是一个对象,所以它在声明时一定要初始化。
指针则是一个对象,它有着自己的地址和存储空间,它所存放的内容一般为地址值,它在声明时可以不初始化。
想要理解一个复合类型最简洁的方法是从右往左去读,例如const double *const ptr = &pi ;,从右开始第一个是const代表它是一个常量对象,第二个*代表它是个常量指针,第三个const double代表这个常量指针指向的是一个双精度浮点型对象;再如指向指针的引用:int* &ref = ptr;
关于const:
const在默认状态下仅对单文件内有效,再多个文件内定义了同名const对象相当于独立的对象,想要采用一个const作变量多个文件共同访问则需要在所有文件中加上extern关键字并保持在一个地方定义其他文件声明。
在c11中新添加constexpr作用于指针上等效于定义了一个顶层const的对象,即指针所存的地址不能改变。
关于类型别名:
目前有两种方法来定义类型别名,传统方法是使用typedef 原类型名 别名,在c11中新加入了别名声明,using 别名=原类型名。
采用别名代入复合类型时容易产生误解,如:
tpyedef char* pstr;
const pstr cstr = 0;
const char* cstr = 0;
前者代表cstr是一个顶层const,所存地址是一个char*的地址且不能修改。后者代表cstr是一个底层const,所指向的是一个char*,char*的内容不能通过ctr修改。
关于string类:
一些对于string中的单个字符的操作被封装在cctype文件里面,包括检查数字、字母、大小写、标点符号、空格、可打印。
string的初始化类型有直接赋值和拷贝赋值两种。
string和字符串数组可以拼接,返回的结果也是string。
取得string字符数的size函数返回类型是根据不同平台定义的,在比较时最好选择unsigned的变量以防出现溢出。
网友评论