电子科大C语言课件

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Book 3 Unit 5
• 含义 含义: 取变量的地址 • 两者关系:互为逆运算 含义: 取指针所指向变量的内容 *i_pointer i_pointer 单目运算符 单目运算符 • 理解 10 &i_pointer 2000 优先级: 2 优先级: 2 i 结合性:自右向左 结合性:自右向左 整型变量i 2000 2001 10 i_pointer = &i &i =&(*i_pointer) &(*i_pointer) 2002 i = *i_pointer *i_pointer = *(&i) *(&i) 2003 2004 变量i_pointer 2005 2000 指针变量 2006 i_pointer-----指针变量,它的内容是地址量 *i_pointer----指针的目标变量,它的内容是数据 &i_pointer---指针变量占用内存的地址 …... …...
*p=&i; 例 int int i; int int i; *p=&i; int *q=p; 例 main( ) { int i; static int .............. }
用已初始化指针变量作初值
*p=&i;
不能用auto变量的地址 去初始化static型指针
( )
N e w
H o r i z o n
swap(int *p1, int *p2) { int *p; 2000 p=p1; p1=p2; 2002 p2=p; 2004 地址传递 } 2006 main() 2008 COPY { int a,b; 200A int *pointer_1,*pointer_2; 200C scanf("%d,%d",&a,&b); 200E pointer_1=&a; pointer_2=&b; if(a<b) swap(pointer_1,pointer_2); 2010 printf("%d,%d",*pointer_1,*pointer_2); } …... 5 9 2000 2002 (swap) 2000 2002 2002 2000 2000 **** ...
2002 2003 2004
10
变量的内容
变量i_pointer 指针变量
2000 指针变量 变量地址 (指针) 2006 指向
2005
变量 变量值
地址存入 指针变量
…...
N e w
H o r i z o n
C o l l e g e
E n g l i s h
&与*运算符 VI. Answers To Exercises
...
N e w
H o r i z o n
C o l l e g e
E n g l i s h
VI. Answers To Exercises
例 将数从大到小输出 …...
Book 3 Unit 5
swap(int x,int y) { int t; t=x; x=y; y=t; } 值传递 main( ) { int a,b; COPY int *pointer_1,*pointer_2; scanf("%d,%d",&a,&b); pointer_1=&a; pointer_2=&b; if(a<b) swap(*pointer_1,*pointer_2); printf("\n%d,%d\n",a,b); }
Book 3 Unit 5
变量a 变量b
变量x 变量y 变量temp
N e w
H o r i z o n
C o l l e g e
E n g l i s h
VI. Answers To Exercises 例 将数从大到小输出
swap(int *p1, int *p2) 2000 { int p; 2002 p=*p1; 2004 *p1=*p2; 2006 *p2=p; 2008 } COPY 200A main() 200C { int a,b; int *pointer_1,*pointer_2; 200E scanf("%d,%d",&a,&b); 2010 pointer_1=&a; pointer_2=&b; if(a<b) swap(pointer_1,pointer_2); printf("\n%d,%d\n",a,b); }
( ) ( )
N e w
H o r i z o n
C o l l e g e
E n g l i s h
VI. Answers To Exercises 零指针与空类型指针
Book 3 Unit 5
p指向地址为0的单元, • 零指针: 系统保证该单元不作它用 • 定义:指针变量值为零 表示指针变量值没有意义 – 表示: int * p=0; • void *类型指针 表示不指定p是指向哪一种 类型数据的指针变量 – 表示: void *p; – 使用时要进行强制类型转换
Book 3 Unit 5
(main) 9 5 5 9 2000 2002 (swap) 2000 2002 5 ...
运行结果:9, 5
…...
整型变量a 整型变量b 指针pointer_1 指针pointer_2
指针p1 指针p2 整型p
N e w
H o r i z o n
C o l l e g e
N e w
H o r i z o n
C o l l e g e
E n g l i s h
VI. Answers To Exercises
Book 3 Unit 5
第八讲
指针的概念 指针变量 指针与数组
指 针
N e w
H o r i z o n
C o l l e g e
E n g l i s h
2000 2002 2004 2006 2008 200A 200C 200E 2010
5 9 2000 2002 (swap) 9 5 9 5 5 ...
整型x 整型b 整型t
运行结果:5,9
N e w
H o r i z o n
C o l l e g e
E n g l i s h
VI. To Exercises 例 Answers 将数从大到小输出
N e w
H o r i z o n
C o l l e g e
E n g l i s h
VI. Answers To Exercises 指针变量的初始化
Book 3 Unit 5
一般形式:[存储类型] 数据类型 *指针名=初始地址值; 例 例 int i; int *p=&i; 赋给指针变量, 不是赋给目标变量 变量必须已说明过 类型应一致
§Answers 8.1 指针的概念 VI. To Exercises 变量与地址
内存中每个字节有一个编号-----地址
内存 0
Book 3 Unit 5
程序中: int i;
float k;
编译或函数调用时为其分配内存单元
…...
2000 2001 2002 2003
i k
2005
变量是对程序中数据 存储空间的抽象
…... …...
N e w
H o r i z o n
C o l l e g e
E n g l i s h
VI. Answers To Exercises 指针变量作为函数参数——地址传递
特点:共享内存,“双向”传递 例 将数从大到小输出 (main) 2000 swap(int x,int y) 5 2002 { int temp; 9 2004 temp=x; COPY (swap) 2006 x=y; 5 9 2008 y=temp; 5 9 200A } 5 main( ) 运行结果:5, 9 { int a,b; scanf("%d,%d",&a,&b); if(a<b) swap(a,b); printf("\n%d,%d\n",a,b); 值传递 } …... …...
整型变量i

i=3;
-----直接访问
3 20 10
变量i_pointer 指针变量
2006

*i_pointer=20;
-----间接访问
…...
N e w
H o r i z o n
C o l l e g e
E n g l i s h
VI. Answers To Exercises
Book 3 Unit 5
N e w
H o r i z o n
C o l l e g e
E n g l i s h
VI. Answers To Exercises 直接访问与间接访问
直接访问:按变量地址存取变量值 间接访问:通过存放变量地址的变量去访问变量
…...
Book 3 Unit 5
2000 2001
2002 2003 2004 2005 2000
…...
N e w
H o r i z o n
C o l l e g e
E n g l i s h
VI. Answers To Exercises 指针与指针变量
• 指针:一个变量的地址 • 指针变量:专门存放变量地址的变量
指针 …...
Book 3 Unit 5
2000
整型变量i
变量的地址
2001
例 char *p1; void *p2; p1=(char *)p2; p2=(void *)p1;
N e w
H o r i z o n
C o l l e g e
E n g l i s h
VI. Answers To Exercises

Book 3 Unit 5
main( ) 指针变量必须先赋值,再使用 { int i=10; int *p; *p=i; 整型变量i printf(“%d”,*p); 2000 2001 10 } 2002 危险! 2003 2004 指针变量p 例 main( ) 2005 随机 { int i=10,k; 2006 int *p; p=&k; *p=i; printf(“%d”,*p); }
§ 8.2 指针变量
指针变量与其所指向的变量之间的关系 i_pointer 变量i i &i 2000 3 i=3; *i_pointer *i_pointer i_pointer *i_pointer=3
指针变量的定义
• 一般形式: [存储类型] 数据类型 *指针名; 例 int *p1,*p2; float 表示定义指针变量 *q ; 合法标识符 指针变量本身的存储类型 指针的目标变量的数据类型 不是‘ *’运算符 static char *name; 注意: 1、int *p1, *p2; 与 int *p1, p2; 2、指针变量名是p1,p2 ,不是*p1,*p2 3、指针变量只能指向定义时所规定类型的变量 4、指针变量定义后,变量值不确定,使用前必须先赋值
高级语言程序设计
主讲人:袁学松
N e w
H o r i z o n
C o l l e g e
E n g l i s h
பைடு நூலகம்
VI. Answers To Exercises
Book 3 Unit 5
上一讲回顾
函数的定义 函数的返回值 函数的调用 函数参数及其传递方式 函数的嵌套与递归调用 数组作函数参数 变量的存储属性
C o l l e g e
E n g l i s h
VI. Answers To Exercises
Book 3 Unit 5
指针变量的赋值运算 int *p,a; p=&a; (将变量a地址p) int *p1,*p2=&i; p1=p2; (指针变量p2值p1)
– 不能把一个整数p,也不能把p的值整型变量 如 int i, *p; p=1000; i=p;
E n g l i s h
VI. Answers To Exercises 例 将数从大到小输出
…...
Book 3 Unit 5
swap(int *p1, int *p2) 2000 { int *p; 9 int x; 5 2002 *p=*p1; int *p=&x; 9 9 2004 *p1=*p2; 2000 2006 *p2=*p; 2002 编译警告! 2008 } 结果不对! COPY (swap) 200A 指针p1 main() 2000 指针p2 { int a,b; 200C 2002 int *pointer_1,*pointer_2; 指针p 200E **** 假设2000 scanf("%d,%d",&a,&b); 2010 pointer_1=&a; pointer_2=&b; if(a<b) 指针变量在使用前 swap(pointer_1,pointer_2); 必须赋值! printf("\n%d,%d\n",a,b); } 运行结果:9,9
相关文档
最新文档