标签:
一.指针定义
C++规定,存放地址的变量称为指针变量,变量的地址称为变量的指针。指针变量是一种特殊的变量,它不同于一般的变量,一般变量存放的是数据本身,而指针变量存放的是数据的地址。
指针变量也是变量,只是指针变量存储的是变量的指针。指针变量存放的是变量的指针,在32位系统中指针的宽度为32位(即4字节),所以在32位系统中,指针变量的大小是4字节,无论是什么类型的指针变量。
一个指针变量有两个属性,一个是它的值,另外一个是它的类型。这个类型表示指针所指向的变量的数据类型,而不是指针自身的类型。这个类型有两个作用:一是指示编译在解引用时从内存中读取几个字节,指针指向下一个元素内存跳变几个字节;二是指示编译在进行指针类型转换时如何进行类型检查匹配。例
int nValue = 0xFF00;
char* pszValue = reinterpreter_cast<char*>(&a);
cout<<*p<<endl;
本例结果为0,即只取出了低十六进制位一字节的数值。
C/C++中有两个特殊的指针,分别是空指针和void指针。空指针是一种特殊指针,它的值是0。C/C++用符号常量NULL表示这个空值,并保证这个值不会是任何变量的地址。空指针可以给任何指针赋值。所以空指针一般用于判断指针是否合法。void指针又称为通用指针,它可指向任何变量。C语言允许直接把任何变量的地址作为指针赋给通用指针。但有一点需要注意,void*不能指向由const修饰的变量。
指针注意事项:
1.一个指针变量定义了,确保其初始化,以防此指针悬空变成野指针。
2.如果一个指针变量被delete释放后,确保其被赋值为NULL,防止此指针变量变为野指针。
3.如果一个函数的形式参数可接收所有类型的指针,请将此函数的形参声明为void*,如C语言内存操作系列函数(memmove,memcopy)就是这类函数。
4.禁止使用void*指针操纵其指向的对象,因为void*操作对象时无法确定对象的类型。
指针变量初始化的4种方式:
1.使用NULL指针进行初始化,因为NULL可以给任何指针变量初始化。
2.使用类型匹配的对象的地址。
3.另一个对象之后的下一个地址
4.同一类型的另一个有效的指针
int iVal;
int iZero = 0;
const int piVal = NULL;
int* pi = iVal; //error:用一个整形变量初始化pi是错误的
pi = iZero; //error:用整形值0初始化pi是错误的
pi = piVal; //OK:通过const int指针初始化int指针是合法的
pi = NULL; //OK:直接通过恒值0初始化int指针是合法的
pi = &iVal; //OK:使用int型对象地址初始化int型指针是合法的
由于指针的类型用于确定指针所指向的对象的类型,因此初始化或赋值时必须保证类型匹配。
指针用于间接访问对象,并基于指针的类型提供可执行的操作。也就是说指针必须指向int型变量,不能指向double或其他,否则基于指针进行的间接操作都是未定义的
绝对不能把一个整形值赋值给一个指针(NULL)除外
标签:
原文地址:http://www.cnblogs.com/fenghuan/p/4820179.html