码迷,mamicode.com
首页 > 编程语言 > 详细

C++指针

时间:2015-09-18 20:24:40      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

一.指针定义

  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)除外     

 

C++指针

标签:

原文地址:http://www.cnblogs.com/fenghuan/p/4820179.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!