C++指针小结
程序员文章站
2022-07-03 14:49:39
...
- 声明指针
要声明指向特定类型的指针,需按照如下格式:
typeName *pointerName
示例:
double *pn;//pn指向一个double类型的值
char *pc;//pc指向一个char类型的值
- 给指针赋值
将内存地址赋给指针,可以对变量名运用&运算符,来获得被命名的内存的地址,new运算符返回未命名的内存地址
示例:
double *pn;
double *pa;
char *pc;
double bubble=3.2;
pn=*bubble//将pn的地址赋给pn;
pc=new char//给pc赋一个char 的地址;
pa=new dobule[20]//给pa赋值一个数组长度为20的地址;
- 对指针解除引用
对指针的引用意味着获取指针指向的值,对指针应用解除指针引用或间接值运算符(*)来解除引用。
cout<<*pn;//输入一个double值
*pc<<'S'//将'S'的地址赋给pc
- 区分指针和指针指向值
如果pt是指向int的指针,则*pt不是指向int的指针,而是完全等同一个int的类型变量,pt才是指针。
示例:
int *pt=new int ;//给pt赋值一个int的地址
*pt=5;
- 数组名
在多数情况下,C++将数组名视为数组第一个元素的地址
示例:
int c[10];//c的地址为c[0]的地址
一种例外情况是,将sizeof运算符用于数组名,此时将返回整个数组的长度
- 指针算术
C++允许将指针和整数相加。加一的结果等于原来的地址加上指向对象占用的总字节数。还可以将指针减去另一个指针,获得两个指针的差。后一种运算将得到一个整数,仅当两个指针指向同一个数组(也可以指向超出结尾的一个位置)时运算才有意义:将得到两个元素的间隔
示例:
int a[10]={5,2,8,4,1,2,2,4,6,8};
int *pt=a;
pt=pt+1;//pt原来地址3004上加上4字节
int *pe=&a[9];//pe是3036,占4个字节
pe=pe-1;//pe地址是3032,占4个字节
int diff=pe-pt;//得到间距
- 数组的动态联编和静态联编
使用数组声明创建数组时,将采取静态联编,即数组长度在编辑时设置:
int a[10];
使用new[]运算符创建数组时,将采取动态联编(动态数组),即将运行时为数组分配空间,其长度也在运行时分配,使用完这种数组后,应使用delete[]释放其占用的内存
int size;
cin>>size;
int *a=new int [size];
.....
delete []a;
- 数组表示法和指针表示法
使用方括号数组表示法等同于对指针解除引用:
a[0] means*a means the value at address a;
a[3] means*(a+3)means the value at address a+3;
数组名和指针变量都是如此,因此对于指针和数组名,既可以使用指针表示法,也可以使用数组表示法。
int *pt=new int [5];
*pt=5;
pt[0]=6;
pt[9]=44;
int coast[10];
*(coast+4)=12;
上一篇: 时间戳
下一篇: C语言 | 指针小结