指针是C语言的特色和精髓,也是C\C++里面比较难于理解的、比较复杂的,只有全面理解掌握了它才算学会了C。它是大多数C程序的重要部分,在许多C++程序中也仍受到重用。虽然现在C++采用vector类型和迭代器,以尽量避免使用指针和数组,但指针的重要性仍不容忽略。
近期对指针进行了全面学习,以下就做一个总结吧。
一、指针的基本定义:
对象的“指针”即为对象的地址,用于指示对象的存储位置。指针所指的物理存储空间称为“指针所指对象”。
对象可以通过地址访问,称为“指针访问”。运算符为“*”。
例如:int a=0; int *p=&a; cout<<a<<*(&a)<<*p; (对*p的操作相当于对a的操作)
对象的存放地址是由系统分配的,C/C++代码只能查看而不能指定对象的地址。
“指针变量”是指存放地址值的变量,(例:在32位机上,它有4个字节,用8位十六进制表示如0x8FC6FFF4)。
定义形式为: 类型 *标识符;
(注:有时没有严格区分指针和指针变量。)
int *p=NULL; 表示指针变量不指向任何内存单元,或表示为 p=0;
void *p; void指针变量能够存放任意内存地址,但解释时需强制类型转换。用于能支持多种数据类型的数据操作。
指针的运算有:递增、递减和相减。指针偏移是以所指对象类型所占内存大小为单位的。不允许相加。
指针与const: (主要弄清楚const约束在什么地方)
指向常量的指针: const 类型 *指针; 或 类型 const *指针; 能修改指针p,但不能修改指针所指对象*p。