第四章 数组和指针

 

  • 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
  • 可以用数组初始化vectorconst 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=&num;

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;

//*ipint[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为同一个含义,不过21要更容易理解

//ip是一个指向含有4个元素的数组指针,即++ip可以指向下面第4int元素的地址

 

 

 

 

读入一组string类型的数据存储在vector中,再把该vector对象复制到字符指针数组

 

 string strget; vector<string> vec; while(cin>>strget) { vec.push_back(strget); } char **pre=new char*[vec.size()]; size_t ix=0; for(vector<string>::iterator ite=vec.begin();ite!=vec.end();ite++,ix++) { pre[ix]=new char[(*ite).size()+1]; strcpy(pre[ix],(*ite).c_str());//c_str()函数返回一指向C字符串的指针, 内容与本string串相同. } for (ix=0;ix!=vec.size();ix++) { delete [] pre[ix]; } delete [] pre;

你可能感兴趣的:(c,String,vector,null,delete,iterator)