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

1、理解指针

当咱们声明一个变量时,系统会在内存中分配适当的存储空间,以保存该变量的值,因为每个字节都有惟一的地址编号,于是内存存储空间都有本身的地址编号。又因为内存地址只是编号,于是又能够把它复制给变量,这种保存地址的变量就称为指针变量数组

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

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

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

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

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

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

必须确保指针老是指向相应的数据类型。编译器

指针能够初始化给变量,NULL,零。it

指针很灵活,咱们能够在不一样的语句中使用同一指针指向不一样的数据类型,也可使用不一样的指针指向同一数据变量。编译

3、经过指针访问变量

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

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

故n==179。 特别注意:数据类型

*ptr = 25;

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

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

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

int **p2;

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

5、指针表达式

关于指针所指变量的值的表达式;例如:若是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/p二、p1*p二、p1/3)。指针不能用于除法或乘法运算(p1+p2);相似地,不能对两个指针进行加法操做。

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

6、指针的递增与比例因

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

相关文章
相关标签/搜索