- C++应尽量使用vector和迭代器,只有在强调速度才使用数组和指针。
- 非const变量以及要到运行阶段才知道其值的const变量都不能用于定义数组的维数。
- 现在C++采用string类型取代C风格字符串。
- 取地址操作只能用于左值,因为只有当变量用作左值时,才能取其地址。
- string* ps1,ps2;实际上只把ps1定义为指针,ps2并非指针,所以尽量写为:string *ps1,ps2;
- int *pi=NULL;//ok,equivalent int *pi=0;
- 只要定义的多个变量具有相同的类型,就可以在for循环的初始化语句中同时定义他们。for(int a=1,b=0;;){}.
- 标准库函数<cstring>中的strlen用于计算C风格字符串中字符的个数,不包括null结束符。strcat(str1,str2)把str2连接到str1后面,并覆盖str1最后一位null。
- 可以用数组初始化vector。const size_t arr_size=2;int int_arr[arr_size]={1,2};vector<int>ivec(int_arr,int_arr+arr_size);
- char get_c;while(cin>>get_c){};接收标准输入,ctrl+z结束。
- 指向const对象的指针
int a; const int *ip=&a;
C++强制要求指向const对象的指针也必须具有const特征。不能使用const对象的指针修改基础对象,如果该指针指向的是一个非const对象,则可以用其他方法修改。可理解为指向const的指针自以为指向const的指针。
- const指针
int num=0; int *const cur=#
cur是指向int型对象的const指针。const指针的值不能修改,即不能使cur指向其他对象,但并不意味着不能使用该指针修改他指向对象的值。
- typedef string *pstring;
const pstring cstr;//最好写为pstring const pstring;
const修饰的是pstring的类型,这是个指针。语句语义即把cstr定义为指向string类型对象的const指针。等价于:
string *const cstr;
int ia[3][4];
//法1
int (*ip)[4]= ia;
//*ip是int[4]类型——即ip是一个指向含有4个元素的数组指针
//法2
typedef int int_array[4];
int_array *ip = ia;
//2维数组的循环输出
for(int_array *p=ia;p!=ia+3;++p)
{
for(int *q=*p;q!=*p+4;++q)
{
cout<<*q<<endl;
}
}
//其中法1和法2为同一个含义,不过2比1要更容易理解
//ip是一个指向含有4个元素的数组指针,即++ip可以指向下面第4个int元素的地址
读入一组string类型的数据存储在vector中,再把该vector对象复制到字符指针数组