文档介绍:第十章指针
C程序设计中使用指针可以:
使程序简洁、紧凑、高效
有效地表示复杂的数据结构
动态分配内存
得到多于一个的函数返回值
指针的概念
变量与地址
程序中: int i;
float k;
内存中每个字节有一个编号-----地址
…...
…...
2000
2001
2002
2005
内存
0
2003
i
k
编译或函数调用时为其分配内存单元
变量是对程序中数据
存储空间的抽象
…...
…...
2000
2004
2006
2005
整型变量i
10
变量i_pointer
2001
2002
2003
指针与指针变量
指针:变量的地址
指针变量:存放变量地址的变量叫~ ,简称指针
2000
指针
指针变量
变量的内容
变量的地址
指针变量
变量
变量地址(指针)
变量值
指向
地址存入
指针变量
变量 i
指针变量
i_pointer
XXXX
指针与指针变量
指针:变量的地址
指针变量:存放变量地址的变量叫~ ,简称指针
指针变量
变量
变量地址(指针)
变量值
指向
地址存入
指针变量
变量 i
指针变量
i_pointer
XXXX
指针的指向:指针得到某一地址量时,即指向该地址对应的内存区域。 i_pointer指向 i
指针的目标:指针指向的内存区域中的数据。
指针的目标变量:指针指向的内存区域为某一变量的内存空间。该变量为指针的目标变量。
指针变量的定义
一般形式: [存储类型] 数据类型*指针名;
合法标识符
指针变量本身的存储类型
指针的目标变量的数据类型
即基类型,简称指针的数据类型
表示定义指针变量
不是‘*’运算符
例 int *p1,*p2;
float *q ;
static char *name;
注意:
1、int *p1, *p2; 与 int *p1, p2;
2、指针变量名是p1,p2 ,不是*p1,*p2
3、指针变量只能指向定义时所规定类型的变量
4、指针变量定义后,变量值不确定,应用前必须先赋值
指针变量的初始化
一般形式:[存储类型] 数据类型*指针名=初始地址值;
赋给指针变量,
不是赋给目标变量
例 int i;
int *p=&i;
变量必须已说明过
类型应一致
例 int *p=&i;
int i;
例 int i;
int *p=&i;
int *q=p;
用已初始化指针变量作初值
例 main( )
{ int i;
static int *p=&i;
..............
} ()
不能用auto变量的地址
去初始化static型指针
指针的运算符&与*运算符
含义
含义: 取变量的地址
单目运算符
优先级: 2
结合性:自右向左
含义: 取指针所指向目标的内容
单目运算符
优先级: 2
结合性:自右向左
两者关系:互为逆运算
理解
…...
…...
2000
2004
2006
2005
整型变量i
10
变量i_pointer
2001
2002
2003
2000
指针变量
i_pointer-----指针变量,它的内容是地址量
*i_pointer----指针的目标变量,它的内容是数据
&i_pointer---指针变量占用内存的地址
2000
10
i_pointer
*i_pointer
&i_pointer
i
i_pointer &i &(*i_pointer)
i *i_pointer *(&i)
i_pointer = &i = &(*i_pointer)
i = *i_pointer = *(&i)
2000
10
2004
指针与变量的直接访问与间接访问
直接访问:按变量地址直接存取变量值
间接访问:通过存放变量地址的变量(指针)去访问变量
例 i=3; -----直接访问
指针变量
…...
…...
2000
2004
2006
2005
整型变量i
10
变量i_pointer
2001
2002
2003
2000
3
例*i_pointer=20; -----间接访问
20
指针变量
…...
…...
2000
2004
2006
2005
整型变量i
10
变量i_pointer
2001
2002
2003
2000
整型变量k
例 k=i; --直接访问
k=*i_pointer; --间接访问
10
例 k=i;
k=*i_pointer;
例指针的概念
main()
{ in