内容正文:
第9章 指针
第9章 指针
指针变量
野指针与空指针
指针变量作形参
指针作函数的返回值
地址参与运算
指针与一维数组
一维数组作形参
指针与二维数组++
指向指针类型的指针
main函数和命令行参数
指向函数的指针变量
使用堆空间
典型命题
指针变量
这节课我们讨论指针变量。
3
变量与存储单元
变量标识内存中的存储单元,程序中借助变量使用存储单元。
语句int i = 5;,从C语言角度分析,将5存入整型变量i中,其值为5;从计算机的角度分析,将整数5的编码存入4个字节的整型存储单元中。
内存中的存储单元用地址标识。
语句scanf("%d", &i);中操作符&的作用
就是获得变量i的存储单元的地址。
变量标识内存中的存储单元,程序中借助变量使用存储单元。
语句int i = 5;,从C语言角度分析,将5存入整型变量i中,其值为5;
从计算机的角度分析,将整数5的编码存入4个字节的整型存储单元中。
内存中的存储单元用地址标识。
语句scanf("%d", &i);中操作符&的作用
就是获得变量i的存储单元的地址。
C语言中称变量,内存中称存储单元。
4
指针变量
如int i = 5; ,double f = 2.3;,整型变量i用于存储整数,浮点型变量f用于存储小数。指针变量用于存储某类存储单元的地址。
定义指针变量的一般形式为:类型 *标识符。
语句int *pi;定义了一个指针变量pi,pi的存储单元用于存储一个int型存储单元的地址,即int型地址,如整型变量i的地址。
指针变量pi用于存储int型地址,可称作整型指针变量,或int型指针变量。整型指针变量pi不能存储double型变量f的地址。
如int i=5; ,double f=2.3;,整型变量i用于存储整数,浮点型变量f用于存储小数。指针变量用于存储某类存储单元的地址。
定义指针变量的一般形式为:类型 *标识符。
语句int *pi;定义了一个指针变量pi,pi标识的存储单元用于存储一个int型存储单元的地址,即int型地址,如整型变量i的地址。
指针变量pi用于存储int型地址,可称作整型指针变量,或int型指针变量。
整型指针变量pi不能存储double型变量f的地址。
5
给指针变量赋值
VC6.0中存储单元的地址是32位的二进制数,因此,所有指针变量的长度都是4个字节。
&操作符的作用是得到变量的地址,故语句pi = &i;可把整型变量i的地址存入整型指针变量pi中。
指针变量pi存储的地址是多少并不重要,关键在于存储了哪个存储单元的地址,如图所示。
VC6.0中存储单元的地址是32位的二进制数,因此,所有指针变量的长度都是4个字节。
指针变量用于存储某类存储单元的地址。
整型指针变量pi可以存储整型变量i的地址。获得整型变量i的地址可用取地址操作符&。
故语句pi = &i;可把整型变量i的地址存入整型指针变量pi中。
指针变量pi存储的地址是多少并不重要,关键在于存储了哪个存储单元的地址,如图所示。
6
指针变量与其指向的存储单元
指针变量存储了哪个变量的地址,就称它指向了那个变量的存储单元。使用指针变量,就是使用其指向的存储单元。
如有double f, *pf; pf = &f;,则double型指针变量pf指向了double型变量f的存储单元。
若有double *p; p = pf;,则指针变量p与指针变量pf指向了同一个存储单元。
指针变量存储了哪个变量的地址,就称它指向了那个变量的存储单元。
使用指针变量就是使用其指向的存储单元。
指针变量指向了哪个存储单元是关键。
指针变量的难点在于涉及了两个存储单元,自身的存储单元和其指向的存储单元。
如有double f, *pf; pf = &f;,则double型指针变量pf指向了double型变量f。
对于指针变量需注意两个存储单元,①指针变量pf本身的存储单元,②pf指向的存储单元。
指针变量赋值时,若有double *p; p = pf;,指针变量p赋值为指针变量pf,即其的值是&f,
但更强调的是p也指向了pf指向的存储单元。
7
间接引用操作符*
间接引用操作符*用于标识指针变量指向的存储单元。
表达式*pi求值时,先读取指针变量pi的值,得到&i,即变量i的存储单元的地址,再通过该地址使用其标识的整型存储单元,即变量i的存储单元。
简单说,当pi指向变量i时,*pi相当于变量i。printf("%d", *pi);相当于printf("%d", i);,*pi = 9;相当于i = 9;。
这个整型存储单元,通过变量i使用,称为直接引用;通过*pi使用,称为间接引用。
如图所示,整型变量i的值5,整数5可以参与算术运算,如i + 3的值就是5+3即8.
整型指针变量pi的