[其它考试]二级C语言考试资料大全.ppt
《[其它考试]二级C语言考试资料大全.ppt》由会员分享,可在线阅读,更多相关《[其它考试]二级C语言考试资料大全.ppt(33页珍藏版)》请在三一文库上搜索。
1、第十章 指针,C程序设计中使用指针可以: 使程序简洁、紧凑、高效 有效地表示复杂的数据结构 动态分配内存 得到多于一个的函数返回值,注意:内存单元的地址与内存单元中的数据是两个完全不同的概念。 内存地址内存中存储单元的编号,10.1 指针的概念,变量与地址,程序中: int i; float k;,内存中每个字节有一个编号-地址,i,k,编译或函数调用时为其分配内存单元,变量地址系统分配给变量的内存单元的起始地址。 计算机在遇到变量定义语句时,便将变量登录到“变量表”中。该表的关键属性有两个:一是“变量名” ,二是该变量在内存空间中的“地址(addr)” 。 “变量表”类似于旅社的旅客登记表,
2、它记录了每个入住客人的姓名(变量名)、房间号(地址)、几人间(变量占用的内存大小),3 6 9 2000 : : :,内存用户数据区,: :,i j k i_p,变量值的存取通过变量在内存中的地址进行 存取变量值的方式可以有两种: 1、直接访问直接利用变量的地址进行存取 如:i=2, j=6, k=9。通过变量i、j、k 来访问存储单元。 2、间接访问 如变量 i,不知道其值及地址,而只知道它的地址放在3010、3011中,因此可通过存放地址的单 元找到变量 i 的值(即:通过另一变量访问该变量的值),此为间接访问。 语言规定:在程序中可以定义一种特殊的变量(称为指针变量),用来存放其它变量的
3、地址。,指针与指针变量 指针:一个变量的地址 指针变量:专门存放变量地址的变量叫,2000,指针,指针变量,变量的内容,变量的地址,&与*运算符 含义,含义: 取变量的地址 单目运算符 优先级: 2 结合性:自右向左,含义: 取指针所指向变量的内容 单目运算符 优先级: 2 结合性:自右向左,i_pointer-指针变量,它的内容是地址量 *i_pointer-指针的目标变量,它的内容是数据 &i_pointer-指针变量占用内存的地址,i = *i_pointer = *(&i),i_pointer = &i,10.2 指针变量,指针变量的定义 一般形式: 数据类型 *指针名;,合法标识符,
4、指针的目标变量的数据类型,表示定义指针变量 不是*运算符,例 int *p1,*p2; float *q ;,注意: 1、int *p1, *p2; 与 int *p1, p2; 2、指针变量名是p1,p2 ,不是*p1,*p2 3、指针变量只能指向定义时所规定类型的变量 4、指针变量定义后,变量值不确定,应用前必须先赋值,指针变量的初始化 一般形式:存储类型 数据类型 *指针名=初始地址值;,赋给指针变量, 不是赋给目标变量,例 int i; int *p=,变量必须已说明过 类型应一致,例 int i; int *p=,用已初始化指针变量作初值,例 main( ) int i=10; in
5、t *p; *p=i; printf(“%d”,*p); ,危险!,例 main( ) int i=10,k; int *p; p= ,指针变量必须先赋值,再使用,例 输入两个数,并使其从大到小输出,main() int *p1,*p2,*p,a,b; scanf(“%d,%d“, ,运行结果:a=5,b=9 max=9,min=5,5,2006,9,2008,2006,2008,2006,指针变量作为函数参数地址传递 特点:共享内存,“双向”传递,swap(int x,int y) int temp; temp=x; x=y; y=temp; main() int a,b; scanf(“%
6、d,%d“, ,例 将数从大到小输出,5,9,5,5,9,COPY,指针变量作为函数参数地址传递 特点:共享内存,“双向”传递,swap(int x,int y) int temp; temp=x; x=y; y=temp; main() int a,b; scanf(“%d,%d“, ,例 将数从大到小输出,值传递,5,9,运行结果:5, 9,swap(int *p1, int *p2) int p; p=*p1; *p1=*p2; *p2=p; main() int a,b; int *pointer_1,*pointer_2; scanf(“%d,%d“, ,5,9,2000,2002,
7、5,9,COPY,5,例 将数从大到小输出(用指针类型的数据作函数参数),swap(int *p1, int *p2) int p; p=*p1; *p1=*p2; *p2=p; main() int a,b; int *pointer_1,*pointer_2; scanf(“%d,%d“, ,5,9,2000,2002,5,9,例 将数从大到小输出(用指针类型的数据作函数参数),运行结果:9,5,地址传递,swap(int *p1, int *p2) int *p; *p=*p1; *p1=*p2; *p2=*p; main() int a,b; int *pointer_1,*point
8、er_2; scanf(“%d,%d“, ,swap(int *p1, int *p2) int *p; p=p1; p1=p2; p2=p; main() int a,b; int *pointer_1,*pointer_2; scanf(“%d,%d“, ,1指针处理下面问题:将两个整数的值交换。 2用指针处理下面问题:输入三个整数,按从小到大的顺序输出。,10.3 指针与数组 数组的指针是指数组的起始地址,数组元素的指针是数组元素的地址。 指向数组元素的指针变量,例 int array10; int *p; p=,数组名是表示数组首地址的地址常量,指针的算术运算: pi p id (i为
9、整型数,d为p指向的变量所占字节数) p+, p-, p+i, p-i, p+=i, p-=i等 若p1与p2指向同一数组,p1-p2=两指针间元素个数(p1-p2)/d p1+p2 无意义,例 p指向float数,则 p+1 p+1 4,例 p指向int型数组,且p= 则p+1 指向a1,例 int a10; int *p=,例 int a10; int *p1=,1,数组元素表示方法, 变址运算符 ai *(a+i),ai pi *(p+i) *(a+i),例 int a=1,2,3,4,5,6,7,8,9,10,*p=a,i; 数组元素地址的正确表示: (A)&(a+1) (B)a+ (
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 其它考试 其它 考试 二级 语言 资料 大全
链接地址:https://www.31doc.com/p-2002457.html