福大计算机二级c语言课件第6章

上传人:san****019 文档编号:71170419 上传时间:2019-01-19 格式:PPT 页数:75 大小:916.81KB
返回 下载 相关 举报
福大计算机二级c语言课件第6章_第1页
第1页 / 共75页
福大计算机二级c语言课件第6章_第2页
第2页 / 共75页
福大计算机二级c语言课件第6章_第3页
第3页 / 共75页
福大计算机二级c语言课件第6章_第4页
第4页 / 共75页
福大计算机二级c语言课件第6章_第5页
第5页 / 共75页
点击查看更多>>
资源描述

《福大计算机二级c语言课件第6章》由会员分享,可在线阅读,更多相关《福大计算机二级c语言课件第6章(75页珍藏版)》请在金锄头文库上搜索。

1、6.1 6.2 (一)变量的指针(即地址) 、指向变量的指针变量 存储在内存储器中的每个数据都是用若干个单元(字节)存放。 如一个int型数据占2个单元 为能访问这些内存单元,我们给每个内存单元编号。内存单元的编号称为地址。 变量的指针:存储变量值一个数据的若干个单元的首地址(其中第一个单元的地址),例1: int j=153; char c=A; long m=72561; j的指针为2000 c的指针为2002 m的指针为2003,指向变量的指针变量 例1 int j=153; char c=A; long m=72561;,若用变量p存放变量m的指针,则变量p称为指针变量,且可进一步称变

2、量p为指向变量m的指针变量、,p的值是m的指针,2003,可用*p表示m,注意: 变量的指针与指针变量的区别: 变量的指针:本变量的地址 指针变量:一个变量、此变量是用来存放另一个变量的指针、不是用来存放一个数据,一.定义指针变量:与以前学的普通变量一样,但变量名前加一个* 例如: int a,b,*p,x; char *w,c1,c2; 定义p为指向int型变量的指针变量、 w为指向char型变量的指针变量 注意:一个指针变量只能指向所定义的类型变量,如w只能指向char型变量,不能时而指向一个char型变量,时而又指向一个float型变量。 至于p、w究竟指向哪一个变量,取决于向p、w赋予

3、的地址。,可认为 *p为int型变量,二、指针变量初始化和赋值: 指针变量同普通变量一样,使用之前不仅要定义,而且必须赋予具体的值。指针变量的赋值只能赋予指针(地址),决不能赋予任何其它数据。 int j=153 , k=-42 ,*p= 定义p与q为指针变量 (可认为*p与*q为int型变量),&:取地址运算符。 &j表示变量j的指针,注意: (1) 指针变量初始化的方法: int a , *p=,(2) 指针变量赋值的方法: int a , *p; p=,(3)不能把一个数赋予指针变量 int *ip; ip=1800;,三.用指针变量表示其所指向的变量 即通过指针变量间接访问其所指向的变

4、量 *:称指针运算符或 “间接访问” 运算符。 若有 int *p,j; p= 即 p指向j 则 *p表示指针变量p所指向的变量 j,可认为 *p为int型变量,此*p与j等价,int i,j,*p1,*p2; i=a; j=b; p1= 使p2与p1都指向i, 此时*p2与*p1都 等价于i,p2中内容变化,&i,若执行 *p2=*p1; 即执行 j=i; (表示把p1指向的变量i中的内容赋给p2所指向的变量j中),j中内容变化,b,a,指针变量可出现在表达式中 设int x,y,*px=,四、若指针变量p指向普通变量j (即p=&j) 则有 1、*&j *(&j) *pj 2、&*p&(*

5、p)&jp &*j 无意义,main( ) float a,b,*p,*q,*t; p=,结果: (1)12.8,-6.1 (2)-6.1,12.8,10.1输入3个整数,按由小到大顺序输出 main() 下面程序的方法由下一页图所示 int a,b,c,t ; scanf(”%d%d%d”, ,*pa=,scanf(”%d%d%d”,pa,pb,pc); if(*pa*pb) t=*pa;*pa=*pb;*pb=t; if(*pa*pc) t=*pa;*pa=*pc;*pc=t; if(*pb*pc) t=*pb;*pb=*pc;*pc=t; printf(”%d,%d,%dn”,a,b,c

6、);,main() 下面程序的由下一页图所示 int a,b,c,*t,*pa=,(二)一维数组元素的 指针、指向数组元素 的指针变量: 例 int a 5 ; 数组元素的指针(地址): a+i 或 &a i 数组的指针 数组的起始地址: a 或 &a 0 指向数组元素的指针变量:存放数组元素的指针的变量,注意:例 int a5 ; 中虽然有 &a4=&a3+2 =&a2+4 =&a1+6 =&a0+8 但按规定(与上面矛盾)有: a表示&a0 a+1表示&a1 a+2表示&a2 ,以规定为准,根据指针运算有: *a表示a0 *(a+1)表示a1 *(a+2)表示a2 ,进一步规定: 若有:i

7、nt a 5 , *p=a; 则 p表示&a0、p+1表示&a1、 p+2表示&a2、 *p表示a0、*(p+1)表示a1、 *(p+2)表示a2、 且 可用pi 表示*(p+i)即ai,若有:int a 5 , *p=a+2; (或 *p=&a2 ) 则p表示&a2、p+1表示&a3、 p+2表示&a4 *p表示a2、*(p+1)表示a3、 *(p+2)表示a4、 p0表示*p 即a2 p1表示*(p+1) 即a3 p2表示*(p+2) 即a4,若有:int a 5 , *p=a; 则表示数组元素ai : 1)下标法: 即用ai形式访问数组元素。 2)指针法: *(a+i) 或*(p+i)

8、或pi 或第i次执行下面循环体时的*p for(p=a;pa+5;p+) *p ,一.指向数组元素的指针变量定义、初始化和赋值同(一)中一、二 main( ) int a5=15,-42,61,12,65, k=2, *p1,*p2= 12,65,-42,main() a0=6 int a3,i,*p; a1=4 p=a; a2=2 for(i=0;i3;i+) a0=6 ai=6-2*i; a1=4 for(i=0;i3;i+) a2=2 printf(“a%d=%dn“,i,ai); for(i=0;i3;i+) printf(“a%d=%dn“,i,*(p+i); ,数组a物理结构: 数

9、组a逻辑结构:,int a34=2,5,1,7, 3,9,10,6,4,8,12,11,一、二维数组元素的指针 &aij 或 ai+j 或 *(a+i)+j 根据指针运算:下面二式子表示aij *(ai+j) 或 *(*(a+i)+ j) 特别:*a表示&a00 *a表示a00,解释:把每行看作一个数组名为ai的一维数组,aij看作一维数组ai的元素,则可用ai+j表示&aij 把数组a看作一维数组、其数组元素为ai,则可用 *(a+i)表示 ai 进一步ai+j 可用*(a+i)+j表示,*a表示&a00、 *a+3表示&a03、 *a+4表示&a10、 *a+5表示&a11 即 *a+4*

10、i+j 表示 &aij *(*a+4*i+j) 表示 aij j=列数-1,此4为二维数组的列数,指向二维数组元素的指针变量 (用来存放二维数组元素的指针)的 定义、初始化、赋值同(一)一、二,若 int a34=2,5,1,7, 3,9,10,6,4,8,12,11, 则有: *p=*a, *q= p 表示 & a00 *p 或p0 表示 a00 p+1表示 & a01 *(p+1) 或p1 表示 a01 p+2表示 & a02 *(p+2) 或p2 表示 a02 p+3表示 & a03 *(p+3) 或p3 表示 a03 p+4表示 & a10 *(p+4) 或p4 表示 a10,若 in

11、t a34=2,5,1,7, 3,9,10,6,4,8,12,11, *p=*a, *q= 则有: q 表示 & a12 *q 或q0 表示 a12 q+1表示 & a13 *(q+1) 或q1 表示 a13 q+2表示 & a20 *(q+2) 或q2 表示 a20 q+3表示 & a21 *(q+3) 或q3 表示 a21,把二维数组a 中数据排序 (从小到大) void main() int t , i , j ; int a24=1,6,3,8,2,9,5,0;, *p,p=,&a00可用*a代替,pi可用*(p+i)代替,for(i=0;i=1;i+) for(j=0;j=3;j+)

12、 printf(”%5d”,aij); printf(”n”) ; ,main() int a34=2,5,1,7,3,9,10,6, 4,8,12,11; ,若要按如下方式排序,应如何处理?,int a34=2,5,1,7, 3,9,10,6,4,8,12,11 数组a逻辑结构:,二、二维数组的行指针: &ai 或 a+i 指向行的指针变量: 用来存放行指针的指针变量 解释:把每行看作一个数组名为ai的一维数组,进一步把每行看作一个数组元素ai,从而把数组a看作一个一维数组,数组元素分别为: a0、a1、a2 行指针: a0、a1、a2的指针 注意: ai是由下面构成的整体 ai0 ai1

13、ai2 ai3,注意:1.每行第一个数组元素的指针为 &ai0 或 ai 或 *(a+i) 2. 行指针+1 与 数组元素指针+1 区别 行指针+1表示下一行的行指针 数组元素指针+1 表示下一个数组元素的指针,对行指针进行一次指针运算便得到它们,指向行的指针变量(存放二维数组的行指针)定义、初始化和赋值: int (*h2)4,a34=2,5,1,7, 3,9,10,6,4,8,12,11, (*h1)4=a+1; h2=,h2= 则可用 *h2表示 &a00 *h2+1表示 &a01 *(*h2+5)表示 a11 *(h2+2)+1表示 &a21,h1=a+1; *h1表示 a10 *(*

14、h1+2)表示 a12 *h1+7表示 &a23 *(*(h1+1)+3)表示 a23,void main() int (*p)4,i,j,a34=0,1,2, 3,4,5,6,7,8,9,10,11; p=a; for(i=0;i3;i+) for(j=0;j4;j+) printf(“%4d“,*(*(p+i)+j); printf(“n“); ,0 1 2 3 4 5 6 7 8 9 10 11,此可用a代替,它常用来表示 aij,三、注意: 1)可以改变指针变量p的值,禁止改变数组名a的值(形参除外),如p+是合法的,而a+是错误的,因为a是数组的首地址,是常量。 2)*p+等价于*(p+),由于+和*同优先级,结合方向自右而左。*(p+)与*(+p)作用不同。若p的初值为a,则*

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号