1 / 37
文档名称:

第8章杨路明指针.ppt

格式:ppt   大小:1,001KB   页数:37页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

第8章杨路明指针.ppt

上传人:xunlai783 2018/1/5 文件大小:1001 KB

下载得到文件列表

第8章杨路明指针.ppt

相关文档

文档介绍

文档介绍:指针
C程序设计中使用指针可以:
使程序简洁、紧凑、高效
有效地表示复杂的数据结构
动态分配内存
得到多于一个的函数返回值
指针与指针变量
地址和指针的概念:
…...
…...
2000
2002
2005
内存
0
程序中: int i;

float k;
i
k
内存中每个字节有一个编号-----地址
地址→指针
指针:一个变量的地址
指针变量:专门存放变量地址的变量叫指针变量
指针与指针变量:
…...
…...
2000
2002
2005
内存
0
例:int i=10;
int *p;
p=&i;
i
10
p
2000
2000
p
10
i
指针变量的定义与初始化:
指针变量的定义:
一般形式: 数据类型*指针名;
合法标识符
指针的目标变量
的数据类型
表示定义指针变量
不是‘*’运算符
例: int *p1,*p2;
float *q ;
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;
变量必须已说明过且类型一致
用已初始化指针变量作初值
赋值方法:
例 int i , *p ;
p=&i;
指针变量必须赋值才能使用
例 main( )
{ int i=10;
int *p;
*p=i;
printf(“%d”,*p);
}
…...
…...
2000
2004
2006
2005
整型变量i
10
指针变量p
2001
2002
2003
随机
例 main( )
{ int i=10,k;
int *p;
p=&k;
*p=i;
printf(“%d”,*p);
}
危险!
指针变量与其指向变量的关系:
指针运算符与地址运算符:& *
&:取地址运算符
*: 指针运算符,或指向运算符
例 int i=10;
int *p=&i;
2000
p
10
i
变量i: i *p *(&i)
变量 i 地址:&i p &(*p)
例:通过指针变量访问整型变量
main( )
{ int a=100, b=10;
int *p1, *p2;
p1=&a; p2=&b;
printf(“%d, %d\n”,a,b);
printf(“%d, %d\n”,*p1,*p2);
}
100
a
10
b
p1
p2
100
a
10
b
&a
p1
&b
p2
直接访问与间接访问
直接访问:按变量的地址存取变量的值
间接访问:通过存放变量地址的变量去访问变量
对“&“和“*“运算符的补充说明
若有“p1=&a”,则&*p1代表?
*&a的含义?
分析:先进行&a运算,得a的地址,再进行*运算。即&a所指向的变量,a的地址所指向的变量就是a,因此*&a与a等价
分析:因为++和*为同一优先级,且都为右结合性,因此它相当于*(p1++),由于是“后加”,因此先对p1的原值进行*运算,得到a的值,然后使p1的值改变,这样p1不再指向a了
若有“p1=&a”,(*p1)++代表?
若写成*p1++,作用就不一样了