指针
来源:互联网 发布:免费网络空间 编辑:程序博客网 时间:2024/06/04 19:12
指针
- 指针
- 什么是指针
- 指针的定义和初始化
- 避免使用未初始化的指针
- 初始化和赋值的约束
- void指针
- 指针操作
- 使用指针访问数组元素
- 指针是数组的迭代器
- 指针和const限定符
什么是指针
指针用于指向对象。与迭代器一样,指针提供对其所指对象的间接访问,只是指针结构更加通用一点。
与迭代器不同的是,指针用于指向单个对象,而迭代器只能用于访问容器内的对象。
指针保存的是另一个对象的地址。
string *sp=&s;
//*表明sp是一个指针变量,&是取地址操作符(只能作用于左值)。
尽量避免使用指针和数组!多用vector和string。
指针的定义和初始化
指针需要有一个关联的数据类型,决定了指针所指向的对象的类型。(应该是因为不同类型所占的字节数不同)
注意:
int dp,dp2;//只有dp2才是指针,也就是说连续声明的时候,每一个指针前面都要用
最好是贴着变量名声明 int *dp2;
避免使用未初始化的指针
使用未初始化的指针,很容易导致程序崩溃。未初始化的指针,会将指针中存放的不确定值视为地址。
- 不要提前定义指针
- 如果一定要分开定义,那么要初始化为0值。
初始化和赋值的约束
- 0值或NULL
- 同类型的变量地址或另一指针
void*指针
它可以保存任何类型对象的地址。但是不允许使用void*指针操纵所指向的对象。
指针操作
- *解引用操作符,可以返回对象的值。
指针和引用的比较(两个重要区别)
- 引用总是指向某个对象,一经初始化之后就始终指向同一个对象(所以引用必须在定义时初始化)。
- 赋值的差异:引用赋值,修改的是对象的值。
指向指针的指针(多维)
Int *ppi=new int[10];
for(int i=0;i<10;i++)
ppi[i] = new int[10];
*表明ppi是二维指针,那么*ppi指向的是一个指针,可以把*ppi看成一个大小为10的int数组,里面存储的都是int*指针。
如上便相当于声明了一个二维数组。
使用指针访问数组元素
在表达式中使用数组名,名字会自动转换为指向数组第一个元素的指针(也就是代表那个元素的地址)。
当使用下表访问指针的时候,下标是可以为负的。
指针是数组的迭代器
指针和const限定符
指向const对象的指针
const double *cptr;
这里的cptr是一个指向double类型const对象的指针,const限定了cptr指针所指向的对象类型,而非cptr本身。cptr并不是const。不能通过cptr修改对象的值。
把一个const对象的地址给一个非指向const对象的指针也会编译错误。但是允许把非const对象的地址赋给指向const对象的指针(但是不能通过cptr修改这个对象的值)。
指向const的指针常用作函数的形参。const指针
const指针本身的值不能被修改,即不能指向其它对象了。但是其对象的值还是可以修改的。
与任何const量一样,const指针也必须在定义时就初始化。- 指向const对象的const指针
const double *const pi_ptr=& pi; - 指针和typedef
typedef string *pstring;
const pstring cstr;
这里const修饰的是pstring的类型,即修饰的是指针,等价于
string *const cstr;
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 常用sql脚本
- spring aop execution表达式
- Unity3D自学笔记——Transform
- 带多行下划线的EditText
- Linux 下使用openSSL 生成RSA密钥对
- 指针
- RecyclerView初级
- Server Tomcat v7.0 Server at localhost failed to start.
- 理解js中的new操作符。
- Android 自定义dialog位置和大小
- java递归,非递归遍历二叉树
- spirng mvc配置文件
- Apache配置
- C#开发学习笔记:利用XML配置文件连接数据库