C++指针解读(2)-- 指针变量

1、指针变量

存放指针的变量叫指针变量,定义指针变量的一般形式为:

类型名 *指针变量名;

比如:

int *pi;
float *pf;

另外,也可以在定义指针变量时对它进行初始化。

int i = 12;
float f = 12.0
int *pi = &i;
float *pf = &f;

建议在定义指针变量的同时进行初始,如果此时指针没法指向有效的地址,可以把NULL赋给指针。比如:

int *pi = NULL;

我们可以用下面的图来表示指针变量和其所指向的变量的对应关系。

C++指针解读(2)-- 指针变量_第1张图片

关于指针变量,我们要注意这几个问题:

(1)指针变量前面的“*”号表示该变量为指针变量。指针变量名是pi、pf,而不是*pi、*pf。在C语言中,*pi代表指针变量所指向的变量的值,也就是int i的值;同理,*pf代表float f的值。

比如在定义了指针变量后,应该把地址赋给pi、pf,而不是*pi、*pf:

int i = 12;
float f = 12.0
int *pi;
float *pf;
//正确的赋值方式
pi = &i;
pf = &f;

//下面的赋值是错误的
*pi = &i;
*pf = &f;

(2)一个指针变量包含2个重要的信息:地址和数据类型。地址确定了变量在内存中的位置,数据类型确定了变量所占内存的大小。

(3)int *pi 表示一个指向int型变量的指针变量。它可以指向任何int型变量,但不能指向其他类型。

(4)指向int数据的指针类型表示为:int *,读作”指向int的指针“或”int指针“。int *、char *、float*分别读作int指针、char指针、float指针,它们是3种不同类型的指针。

2、指针相关的几个概念

假如pi是int型的指针变量,它指向变量a,下面我们来看几个概念。

(1)

int *pi = &a;

把变量a的地址赋给指针pi。指针变量pi指向变量a,pi的值是变量a的地址。

(2)

*pi = 100;

表示把整数100赋给pi指向的变量,即把100赋给变量a,a = 100。

(3)

printf("%d\n", *pi);

打印pi所指向的变量的值,即打印变量a的值。

(4)

printf("%p\n", pi);

打印指针变量pi的值,即打印变量a的地址。

(5)

printf("%p\n", &pi);

打印指针变量自身的地址。

(6)&*pi

从右往左读,*pi表示指针变量pi所指向 变量,即a;&a表示取变量a的地址,即指针变量pi。

(7)*&a

先计算&a,即pi;*pi表示变量a。

(8)(*pi)++

先计算*pi,即a;这条语句的意思是a++。

(9)*pi++

从右往左读,先pi++,再*,所以等价于*(pi++)。因为pi是指针变量,这里的pi++是什么意思呢?

pi++表示指针变量向下移动1次,假如pi指向的是整型变量,则pi++就是往下移动4个字节。所以*pi++的意思是读取下一个内存地址的值。当然,这可能会读到非法内存而导致程序出错。

你可能感兴趣的:(C++指针解读,c++,开发语言,指针)