一、地址和指针的概念
地址:内存单元的编号。
指针:一个变量的首地址就叫做该变量的指针。
1、内存中存取数据的方式
1)直接存取
直接用变量名存取变量所占内存单元的内容
例:
int y,x = 3;
y = 3*x+2;
2)间接存取
首先从存放变量地址的指针变量中取得该变量的存储地址,然后再从该地址中存取该变量值。在这种存取方式中,存取变量的值是通过存取指针变量所“指向” 的内存单元中的内容。在此,所谓“指向”,是通过地址来体现的。
例:
int a; //定义了一个变量a
int *p = &a; //对a这个变量取到它的内存编号(即地址)
*p = 3; //对这个地址上的内存单元给值为3
由以上可知:指针变量的值为地址,普通变量的值为数据。
指针变量:用于存放其他变量地址的变量。
二、定义指针变量
1、一般形式:基本类型标识符 *指针变量名;
注意:
(1)指针变量名前的“*”只表示该变量为指针变量,以便区别于普通变量的定义,而指针变量名不包含该“*”。
例如: int x,*s; 说明了s是一个指针变量,但不能说*s是指针变量。
(2)定义指针变量时必须指明基类型。一个指针变量不能忽而指向整型,忽而又指向实型。因为,不同类型的变量所占的字节数是不同的。
2、指针变量赋值时要注意以下几点:
(1)指针变量中只能存放地址,而不能将数值型数据赋给指针变量。
(2)赋给指针变量的变量地址不能是任意的类型,而只能是与指针变量的基类型具有相同类型的变量的地址。
例如,下面的赋值是错误的∶
float a; int * pointer_1; /*声明了指向整型变量的指针变量*/
pointer_1=&a; /*指向整型变量的指针变量里存放了实型变量的地址*/
(3)与一般的变量一样,也可以对指针变量进行初始化。
例如: int x,*p=&x; *p=5;
三、引用指针变量
1、若声明了 int a,*p; 则在引用指针变量时,可能有三种情况:
(1)给指针变量赋值。如:p=&a;
(2)引用指针变量的值(a的地址)。如:printf(“%p”,p);
(3)引用指针变量指向的变量(a的值)。 如:printf(“%d”,*p);
2、两个有关运算符的使用:
(1)& 取地址运算符。 &a是变量a的地址。
(2)* 指针运算符 (或称“间接访问”运算符),*p是指针变量p指向的对象的值。