1、 同一般的变量, 每种变量都有自己的数据类型, 如 int a ; 说明这个变量是保存一个整数的。 指针亦是如此, 定义一个指针变量:
int *pa ;
int *pa ; 则表示变量pa是一个指针变量, pa应当保存类型为int的变量在内存中的地址。
定义时, 其*号的位置可以靠左( int* pa; ), 居中( int * pa; )或靠右(int *pa; ), 具体使用哪种形式可根据个人习惯。
int a = 10 ; int *pa = &a ;
也可以对指针变量进行赋值操作:
int *pb ; int b = 10 ; pb = &b ; //将b的地址赋值给指针变量pb
3、 指针的初步使用
知道了如何对指针类型进行定义、初始化以及如何赋值后就可以初步的去运用指针了, 首先看一个运用示例:
#include <iostream> int main() { int a = 10 ; int *pa = &a ; //定义指针变量pa并初始化地址为变量a在内存中所在的地址 std::cout<< a << "\n" ; //通过变量名访问a变量所在的地址 std::cout<< *pa << "\n" ; //运用*号访问指针变量pa中所保存的地址 return 0 ; }
输出:
10 10 Process returned 0 (0x0) execution time : 0.016 s Press any key to continue.
可以看到, std::cout<< a << "\n" ; 与 std::cout<< *pa << "\n" ; 输出的是相同的结果, 都是10。这是因为 a 与 *pa 实际上都是指向同一个存储地址, *号为间接访问符, 表示要访问指针变量中所存放的内存地址。
再看一个示例, 运用指针改变变量的值:
#include <iostream> int main() { int b = 10 ; int *pb = &b ; std::cout<<"改变前b变量中的值:"<<b<<"\n" ; *pb = 20 ; //运用指针改变变量a所在的存储单元中的内容 std::cout<<"改变后b变量中的值:"<<b<<"\n" ; return 0 ; }
这里运用 *pb = 20 ; 来改变变量b的值, 其功能与 b = 20 ; 的作用相同, 实际他们所改变的都是同一段内存单元中的值。只要能够理解这点, 在掌握指针上会有很大的帮助。
5. 指针运用时需要注意的一些问题
1>. 左右两边类型要一致
什么类型的指针变量存放什么类型的地址。
2>. 避免"野"指针
所谓的野指针即为没有被正确初始化或赋值的指针, 他会随机指向内存中的某个存储单元, 如果不慎通过这个指针对其内存中的值进行其他操作的话后果是不可预知的。 总之, 要保证指针指向的正确性, 在不用时要及时对其赋值为 NULL, 即将其指向的地址设为NULL, 也就是空指针。