8.1 指针是什么
为了说清楚什么是指针,必须先弄清楚数据在内存中是如何存储的,又是如何读取的。
如果在程序中定义了一个变量,在对程序进行编译时,系统就会给这个变量分配内存单元。编译系统根据程序中定义的变量类型,分配一定长度的空间。例如visual C++,内存区的每一个字节有一个编号,这就是“地址”,它相当于旅馆中的房间号。在地址所标志的内存单元中存放的数据相当于旅馆房间中居住的旅客。
由于通过地址能找到所需变量单元,可以说,地址指向该变量单元,因此,将地址形象化地称为“指针”。意思是通过它能找到以它为地址的内存单元。
请务必弄清楚存储单元的地址和存储单元的内容这两个概念的区别。在程序中一般是通过变量名来引 用变量的值。
实际上,通过变量名i找到存储单元的地址,从而对存储单元进行存取操作的。程序经过编译以后已经将变量名转换为变量的地址,对变量值得存取都是通过地址进行的。
这种直接按变量名进行的访问,称为“直接访问”方式。
还可以采用另一种称之为“间接访问”的方式,即将变量i的地址存放在另一变量中,然后通过该变量来找到变量i的地址,从而访问i变量。
通过 以下语句将i的地址存放到i_pointer中。
i_pointer=&i;
指向就是通过地址来体现的。由于通过地址能找到所需的变量单元,因此说,地址指向该变量单元。将地址形象化地称为“指针”。意思是通过它能找到以它为地址的内存单元。
一个变量的地址称为该变量的“指针”。如果有一个变量专门用来存放另一变量的地址(指即针),则称它为“指针变量”。指针变量就是地址变量,指针变量的值是地址(即指针)。
8.2 指针变量
8.2.1使用指针变量的例子
8.2.2 怎样定义指针变量
类型名 *指针变量名;
如 int*pointer_1;
左端的int是在定义指针变量时必须指定的“基类型”。如上例子可以用来指向整型变量。
说明:
(1)指针变量钱么的“*”表示该变量的类型为指针型变量。指针变量名为pointer_1。
(2)在定义指针变量时必须指定基类型。
一个变量的指针的含义包括两个方面,一是以存储单元编号表示的地址(如编号为2000的字节),一是它指向的存储单元的数据类型(如 int ,char , float等)。
(3)如何表示指针类型。如int*。
(4)指针变量中只能存放地址(指针)。
8.2.3 怎样引用指针变量
(1)给指针变量赋值
p=&a;
(2)引用指针变量指向的变量
如果已经执行“p=&a;”
printf(“%d”,*p);
即输出变量a的值。
如果有:*p=1;
即“a=1”
(3)引用指针变量的值。如:
printf("%o',p);
即&a。
注意运算符:
(1)& 取地址运算符。
(2)* 指针运算符,*p代表指针变量P指向的对象。
8.2.4 指针变量作为函数参数