Pointer Summarized
来源:互联网 发布:网络四层协议 编辑:程序博客网 时间:2024/05/23 16:43
<一>指针
指针是c++从c中继承过来的重要数据类型,它提供了一种较为直接的地址操作手段。正确的使用指针,可以方便、灵活而有效的组织和表示复杂的数据结构。动态内存分配和管理也离不开指针。在c++中有专门用来存放内存单元地址的变量类型,这就是指针类型。
(1)指针变量声明
指针也是一种数据类型,具有指针类型的变量称为指针变量。指针类型变量是用于存放内存单元地址的。
指针也是先声明后使用,声明指针的语法形式是:
数据类型*标示符;
例如: int*ptr;
(2)与地址相关的运算“*”和“&”
C++提供了两个与地址相关的运算符——“*”和“&”。“*”称为指针运算符,也称解析,表示获取指针所指向的变量的值。“&”称为取地址运算符,用来得到一个对象的地址。
(3)指针的赋值
①在定义指针的同时进行初始化赋值。语法形式为:
存储类型 数据类型*指针名=初始地址;
②在定义之后,单独使用赋值语句。赋值语句的语法形式为;
指针名=地址;
一个数组,可以用它的名称来直接表示它的初始地址。数组名称实际上就是一个不能被赋值的指针,即常量指针。
关于指针类型,还应注意一下几点。
①可以声明指针常量的指针,此时不能通过指针来改变所指对象的值,但指针本身可以改变,可以指向另外的对象。例如:
int a;
counst int *p1=&a;
int b;
p1=&b;
*p1=1; //编译时出错,不能通过p1改变所指的对象
使用指针常量,可以确保指针所指向的常量不被意外更改。
②可以声明指针类型的常量,这时指针本身的值不会改变。例如:
int *counsr p2=&a;
p2=&b; //错误,p2是指针常量,值不能改变
③一般情况下,指针的值只能赋给相同类型的指针。但是有一种特殊的void类型指针,可以存储任何类型的对象地址,就是说任何类型的指针都可以赋值给void类型的指针变量。经过使用类型显式转换,通过void类型指针便可以访问类型的数据。
(4)指针运算
指针是一种数据类型。与其他数据类型一样,指针变量也可以参与部分运算,包括算术运算、关系运算和赋值运算。
指针可以和整数进行加减运算,但是运算规则比较特殊。比如有指针p1和整数n1,p1+n1表示指针p1当前所指位置后第n1个数的地址,p1-n1表示p1当前所指位置前方第n1个数的地址。“指针++”或“指针--”表示指针当前所指位置下一个或前一个数据的地址。
0专用于表示空指针,也就是一个不指向任何有效地址的指针。例如:
int *p;
p=0;
空指针也可以用NULL来表示,例如
int *p=NULL;
NULL是一个在很多头文件中都有定义的宏,被定义为0.
- Pointer Summarized
- Linux summarized
- One-line Tips Recently Summarized
- pointer
- Pointer
- Inventory Period Has A Status Of ''Closed Not Summarized''
- INV期间关闭后的状态为Closed not Summarized
- smart pointer / shared pointer / normal pointer
- pointer to pointer vs. reference to pointer
- Const & Pointer
- Smart Pointer
- Function Pointer
- const & Pointer
- restrict pointer
- Smart pointer
- pointer trick
- this pointer
- c pointer
- 1
- 求a-z26个字母的三三组合
- unity坦克大战(二)(代码修改后)
- 求二叉树中两个节点的最低公共祖先节点
- 网盘API接口
- Pointer Summarized
- iOS 释放内存/指针清空(release/=nil)深度讨论
- java.lang.IllegalStateException: getOutputStream() has already been called for this response
- HW
- 笔试题目练习
- WebView中接口隐患与手机挂马利用 转载乌云
- 1
- Exercises 4.1 E2
- 关于“android4.0中,在通话界面进入锁屏界面后出现两个电话图标”这一Bug的解决方法