指针
指针是能够存放一个地址的一组存储单元,是一种保存变量地址的变量
地址运算符&只能应用于内存中的对象,即变量和数组元素。它不能作用于表达式、常量或register类型的变量
间接引用(间接寻址)运算符*作用于指针时,将访问指针所指向的对象。
例:
int x=1 , y=2 , z[10];
int x=1 , y=2 , z[10];
int *ip;//指向int类型的指针ip
ip=&x;//ip现在指向x
y=*ip;//y=1
*ip=0;//现在x=0
ip=&z[0];//现在ip指向z[0]
一元运算符*和&的优先级比算术运算符的优先级高,因此可以进行赋值运算
例:
y=*ip+1;
y=*ip+1;
将ip指向的对象的值加1赋给y
注意:(*ip)++;
一定要对*ip加括号,否则该表达式将对ip进行加1运算而不是对ip指向的对象进行加1运算。因为对于*和++这样的一元运算符遵循从右往左的结合顺序
因为指针也是变量,在程序中可以直接使用,不必通过间接引用的方法使用
由于C++是以传值的方式将参数值传递给被调用函数,因此,被调用函数不能直接修改主调函数中变量的值,可以使主调程序将指向所要交换的变量的指针传递给被调用函数。指针参数使得被调用函数能够访问和修改主调函数中对象的值
对于数组a[n]来说指针pa=&a[m](m
指针强制类型转换:*(int *)a=500
NULL指针,表示不指向任何东西的指针,赋给指针0就可以将指针变成NULL指针
由于NULL指针不指向任何地方,没有地址和值,因此在解引用之前加一个判断是否为NULL指针的步骤,用到NULL这个预处理变量的时候,尽量带上cstdlib头文件
最好定义了对象后再定义指向对象的指针
void*能够用来存放任何类型对象的地址