指针
一.概念
指针变量:即内存地址,简称指针。指针变量是用来存放内存地址的变量,在同一CPU构架下,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。有了指针以后,不仅可以对数据本身,也可以对存储数据的变量地址进行操作。
二.指针的定义
例如:int * p;
类型名 * 指针变量名
↓ ↓
必须是指针变量的名称 必须是一个合法的标识符
指针值可以是特殊的地址0,也可以是一个代表机器地址的正整数。
三.指针的基本运算
1.取地址运算和间接访问运算
如果指针的值是某个变量的地址,通过指针就可以间接访问那个变量。以上操作由&(取地址运算符)和*(间接访问运算符)完成。
例如:
int *p, a = 3;
p = &a;
即将整型变量a的地址赋给整型指针p,使指针p指向变量a。也就是说,用运算符&取变量a的地址,并将这个地址值作为指针p的值,使指针p指向变量a。
注意:指针的类型和它所指向的变量的类型必须相同
2.赋值运算
一旦指针被定义并赋值后,就可以如同其他类型变量一样进行赋值运算。
例如:
int a = 3, *p1, *p2;
p1 = &a;
p2 = p1;
将变量a的地址赋给指针p1,再将p1的值赋给p2,因此指针p1和p2都指向变量a。此时,*p1、*p2和a访问同一个存储单元,它们的值一样。
注意:只能将一个指针的值赋给另一个相同类型的指针。
三.指针变量的初始化
例如:
int a;
int *p1 = &a;
int *p2 = p1;
以上对指针p1和p2的赋值都是在定义时进行的,使得指针p1和p2都指向变量a。
注意:
(1)在指针变量定义或者初始化时变量名前面的“*”只表示该变量是个指针变量,它既不是乘法运算符也不是间接访问符。
(2)把一个变量的地址作为初始化值赋给指针变量时,该变量必须在此之前已经定义。因为变量只有在定义后才被分配存储单元,它的地址才能赋给指针变量。
(3)可以用初始化了的指针变量给另一个指针变量作初始化值。
(4)不能用数值作为指针变量的初值,但可以将一个指针变量初始化为一个空指针。
(5)指针变量定义时的数据类型和它所指向的目标变量的数据类型必须一致,因为不同的数据类型所占用的存储单元的字节数不同。
*如有问题欢迎指出!
2021/11/13