C++第十天
2014-07-22 15:32
197 查看
指针:指针是指向某种类型对象的复合数据类型,或者称指针就是存放对象的地址。 访问指针的值:使用解引用操作符 * 和自增操作符++,与在迭代器上的用法类似。 取址操作符:&操作符,获取一个变量的地址。 指针的定义和初始化: C++语言使用*符号把一个标识符声明为指针,例如: //声明指针的风格之一 vector<int> *pevec; int *ip1,*ip2; //声明指针的风格之二 string* str; //str为指针 建议使用声明指针的风格一,因为风格二连续声明指针容易导致混淆,例如: string* ps1,ps2; //ps1为指针,ps2为变量 string* ps1,*ps2; //ps1和ps2都为指针。 指针的可能的取值: 1.保存一个特定对象的地址 2.指向某个对象后面的另一个对象 3.0值,表明不指向任何对象。 (为初始化的指针是无效的,直到该指针赋值后,才可使用它。) 避免使用未初始化的指针,除非所指向的对象已经存在,否则不要先定义指针,这样可以避免定义一个未初始化的指针。 如果必须分开定义指针和其所指向的对象,则将指针初始化为0,因为编译器可检查出0值的指针,程序可判断指针并未指向一个对象。 void* 指针: void*指针可以保存任何类型的对象的地址。 不允许使用void*指针操纵它所指向的对象。 不能使用void*指针保存const对象的地址,而必须使用const void*类型的指针保存const对象的地址 修改指针的值和修改指针指向对象的值 修改指针所指向对象的值:需要解引操作。 *sp="goodbye"; 修改指针的值:给指针直接赋值即可修改指针的值 string s2="some value"; sp=&s2; 指针和引用的比较: 引用总是指向某个对象,定义引用时没有初始化时错误的。 引用已经初始化,就始终指向同一个特定对象。 给引用赋值修噶ide是该引用所关联的对象的值,而并不是使引用于另一个对象关联。 例如: int &ri=ival,&ri2=ival2; ri=ri2; 这个赋值操作修改了ri应用的值ival对象,而并非引用本身,赋值后,这两个引用还是分别指向原来关联的对象,此时两个对象的值相等 指向指针的指针: int ival=11; int *pi=&ival; int **ppi=π //指向指针的指针。 指针的操作: 两个指针相见的结果是标准库类型的ptrdiff_t的数据,ptrdiff_t在cstddef头文件中定义。 指针的自增操作时指向下一个对象的地址,指针的自减操作时指向上一个对象的地址 使用指针遍历数组: const size_t arra_sz=5; int int_arr[arra_sz]={0,1,2,3,4}; for(int *pbegin=int_arr,*pend=int_arr+arra_sz;pbegin!=pend;++begin){ cout << * pbegin<<''; } 指向const对象的指针和const指针: 指向const对象的指针也必须具有const特性,例如: const double *cptr; //指向const对象的指针,允许cptr重新赋值,不能修改指向对象的值,因为指向的对象是const对象 const指针: int eNum=0; int *const curErr=&eNum; //const指针,不能修改指针的值,也就是不能指向其他的对象,可以修改指针指向的对象的值 (const指针也可以指向const对象,即指向指针的值不能修改,也不能修改指针的值) 指针和typedef typedef string *pstring; const pstring cstr;//指向string类型的const指针 等价于:string *const cstr; 声明const pstring时,const修饰的是pstring的类型,这是一个指针,该声明语句应该是把cstr定义为指向string类型对象的const指针。 #include<iostream> using std::cout; using std::cin; using std::endl; int main(){ /* int ival=1024; int *pi;//=&ival; cout<<ival<<"\n"<<*pi<<endl; */ int i=-1; const int ic=1; // const int *pic= i=ic; //指向const对象的const指针 const int *const cpi= //int *const ccc=cpi; //ic=*cpi; return 0; }
相关文章推荐
- C++菜鸟常见错误整理(第十天)
- C++第十天 2016-12-09 3.6-4.1
- c/c++第十天
- c++第十天
- 开发工具大比拚之Visual C++ vs. Delphi(一)
- Byte杂志C++调查报告
- 对今年内将出版的几本C++书的简评
- VC不是梦想,C++需要自由的心
- C++之父B. Stroustrup近期言论
- 开发工具大比拚之Visual C++ vs. Delphi(二)
- 用纯粹的C++编写COM组件
- 开发工具大比拚之Visual C++ vs. Delphi(三)
- 在Delphi与C++之间实现函数与对象共享
- C/C++的思索 C++之父访谈录 [上帝的玩笑吗?]
- 突破C++的虚拟指针--C++程序的缓冲区溢出攻击
- C++: BIG5到GB
- C++ FAQ Lite[8]--引用(更新)
- C++ FAQ Lite[7]--类和对象(更新)
- C++ FAQ Lite[17]--异常和错误处理(更新)