C/C++ 指针小结——指针的概念和如何使用指针

一、理解指针

当我们声明一个变量时,系统会在内存中分配适当的存储空间,以保存该变量的值,由于每一个字节都有唯一的地址编号,因而内存存储空间都有自己的地址编号。又由于内存地址只是编号,因而又可以把它复制给变量,这种保存地址的变量就称为指针变量

我们并不关心指针的实际值,因为每次运行时,指针的值都会发生变化的(每次运行意味着变量重新分配地址)。

我们不能直接保存地址的值,只能利用地址运算符(&),通过保存在地址中的变量来获得地址的值。位于变量之前的地址运算符(&)将可返回该变量的地址。运算符&只能用于单个变量或数组元素。

二、指针变量的声明及初始化

由于指针变量包含的是储存某种数据类型的地址,因此在使用前必须把它们声明为指针。 例如:

int *p; //integer pointer  把变量p声明为指针变量,指向整型数据

把变量的地址赋值给指针变量的过程称为指针变量的初始化。

必须确保指针总是指向相应的数据类型。

指针可以初始化给变量,NULL,零。

指针很灵活,我们可以在不同的语句中使用同一指针指向不同的数据类型,也可以使用不同的指针指向同一数据变量。

三、通过指针访问变量

我们可以用间接运算符‘*’ (反引用运算符) 来实现对指针变量的值的访问。 例如:

int quantity, *p, n;
quantity = 179;
p = &quantity;
n = *p;

故n==179。 特别注意:

*ptr = 25;

该语句把值25存放在地址等于ptr的值的内存中。

四、指针链(指向指针的指针)

指向指针的指针变量必须在名称的前面添加额外的间接运算符。例如:

int **p2;

该声明语句告诉编译器 p2 是指向int类型的指针的指针。

五、指针表达式

关于指针所指变量的值的表达式;例如:如果p1和p2都是声明并初始化了得指针,那么下面的语句是合法的:

y = *p1 * *p2; //第二个 * 是运算符号
sum = sum + *p1;
z = 5* - *p2/*p1;
*p2 = *p2 + 10;

关于关于指针的表达式 C语言允许对指针与整数进行运算;也可以在两个指针之间进行减法运算。例如:

p1 - 2;
p1 - p2;

如果 p1 和 p2 指向相同的数组,那么p2-p1将给出p1与p2之间的元素数目(p1/p2、p1*p2、p1/3)。指针不能用于除法或乘法运算(p1+p2);类似地,不能对两个指针进行加法操作。

还可以使用关系运算符进行指针的的比较。诸如p1 > p2、 p1 == p2和p1 != p2都是允许的。但是,指向不同或无关联变量的指针间的比较没有意义。比较可以用于处理数组和字符串。

六、指针的递增与比例因

在指针进行递增时,所增加的值为该指针指向数据类型的“长度”。这种长度就称为比例因子(scale factor)。例如:如果p1为整形指针,初始值为2800,那么经过p1 = p1 + 1运算后p1的值为2802,而不是2801。

猜你喜欢

转载自my.oschina.net/u/3471006/blog/1838526