计算机c语言—第十章

上传人:子 文档编号:51743805 上传时间:2018-08-16 格式:PPT 页数:60 大小:542KB
返回 下载 相关 举报
计算机c语言—第十章_第1页
第1页 / 共60页
计算机c语言—第十章_第2页
第2页 / 共60页
计算机c语言—第十章_第3页
第3页 / 共60页
计算机c语言—第十章_第4页
第4页 / 共60页
计算机c语言—第十章_第5页
第5页 / 共60页
点击查看更多>>
资源描述

《计算机c语言—第十章》由会员分享,可在线阅读,更多相关《计算机c语言—第十章(60页珍藏版)》请在金锄头文库上搜索。

1、第10章 指针指针类型:与机器内部的硬件结构(如内存地址) 及其对数据的处理形式(如变量、数组等及其类型)等内容有关。变量信息 :对应的地址(称指针,是内存单元号)对应的值 (具体的数值)指针变量:存放变量地址的变量 由此对变量的操作可转换为对指针变量的操作10.1 地址和指针的概念地址就是指针(!=指针变量)例如:int i, j, k; i=3; j=6; k=i+j;编译时,系统将内存单元分配给变量后,变量名就不存 在了, 程序执行时对变量的操作实际上就是根据变量 名查找与之对应的变量的地址,然后对地址中的数据 进行操作。 对变量的操作实际上是对变量所对应的地址中的数 据进行操作。 1.

2、直接访问k = i + j2004 2000 20022005 =9 2001=3 2003=6 2.间接访问 * kp = * ip + *jp 3014 3010 3012 3015 2004 3011 2000 3013 20022005=9 2001=3 2003=6 这里:i p, j p, k p:就称为指针变量,其值是另一个 变量所对应的内存地址。 i j kip jp kp2002200020043010 3012 30143 6 9 2000 2002 2004用户数据区变量的指针:就是变量的地址。如 i 所对应的内存地址是2000,则 i 的指针就是2000指针变量:用来存

3、放变量地址的变量,用来找到另一个变量如:ip所对应的地址是3010,其内容是2000, 2000就是 i 所对应 的地址(指针),因此,ip是存放变量 i 的地址的变量。若ip 是存放变量i 的地址的指针变量,执行操作:ip=则 *ip是指针变量 ip所指的对象(即变量 i ) (思考: ip,*ip,/* p3是指向实型变量的指针变量 * /char * p4; / * p4是指向字符型变量的指针变量 * / int i, j; int *p1, *p2; p1= p2= i=3; *p1=5; j=6; *p2=8;3 5 6 8 2000 2002i jp1 p22000 200210.

4、2.1 定义一个指针变量1、定义指针变量时,变量名前以 * 开头。2、一定要指明基类型且指针变量一经定义就只可指向同类型的变量。如:float *p3; 指针变量名是p3,它只能指向实型数据。 3、在引用中,指针变量前加 * 表示指针变量所指 向的 对象(即变量)。说明:通常,只能将变量的地址赋给指针变量,但在Turbo c中,整 型数据(十进制、十六进制、八进制)也可赋给指针变量, 如:int *p1; p1=100; printf(“%d n”,* p1);指针变量有两种运算符:*:指向对象运算符, 如:* p1, 表示p1指向的对象是变量i10.2.2 指针变量的引用例10_1.c:指针

5、变量操作举例main( )int a, b, *p1, *p2 ;a=100; b=10; p1= p2=(不要写成*p1=printf(“* p1=%d, * p2=%d n”, *p1, * p2);printf(“printf(“p1=%x, p2=%x n”, p1, p2);printf(“运算结果: 一起做一下100 10 ffd4 ffd6a b p1 p2ffd4 ffd6 ffd8 ffda关于 p1= p2= a=100; b=10;则 scanf(“%d%d”, p1=p2= printf(“a=%d, b=%d n”, a, b); printf(“*p1=%d,*p2

6、=%dn”,*p1,*p2); printf(“ printf(“p1=%x, p2=%x, p=%x n”, p1, p2, p); printf(“ if(a ai+ *p - - ai- - *+p a+i - -p a- -i 思考(*p)+=?10.3.3 数组名作函数参数main( )int array10;f(array, 10); f(int arr , int n)arr0array0arr1array1arr10array10调用函数时,以数组名作实 参时实际上是把数组的首地 址传递给形参,此时,形参 数组和实参数组占用的是同 一段内存,在函数调用过程 中,改变形参数组元素

7、实际 上也是改变实参数组元素,调用结束后,虽然形参数组 名不存在了,但对实参数组 元素的操作已产生作用。T10-7.c 将数组a中n个整数按相反顺序存放算法:an-1a0an-2a1an-int(n-1)/2)-1a(n-1)/2a0a1a2a3a4a5a6a7a8a9x0x1x2x3x4x5x6x7x8x937911067542 24576011973 mi=0;i max) max=*p; else if(*p max) max=*p;else if(*p xk) k=j;if(k != i) t=xi;xi=xk;xk=t; 输入:1 3 -2 6 8 -1 9 2 4 5a0a1a2a

8、3a4a5a6a7a8a9x0x1x2x3x4x5x6x7x8x95-213-286-19245 91 83 6-243 3-1 211 3 -2 6 8 -1 9 2 4 5pa0,x0 a1,x1 a2,x2 a3,x3 a4,x4 a5,x5 a6,x6 a7,x7 a8,x8 a9,x9i j 0 1 k=0 x1x0 k=12 x2x13 x3x1 k=34 x4x3 k=45 x5x4 6 x6x4 k=67 x7x6 8 x8x6 9 x9x6 tx0=1, x0x6=9x6 t=1 1 2 k=1 x2x13 x3x1 k=34 x4x3 k=45 x5x4 6 x6x4 7

9、x7x4 8 x8x49 x9x4 tx1=3, x1x4=8x4 t=32 3 k=2 x3x2 k=34 x4x35 x5x36 x6x3 7 x7x3 8 x8x3 9 x9x3 tx2=-2, x2x3=6x3 t=-2 3 4 k=3 x4x3 k=45 x5x46 x6x47 x7x4 8 x8x4 k=8 9 x9x8 k=9 t x3=-2, x3x9=5x9 t=-2 4 5 k=4 x5x4 6 x6x47 x7x48 x8x4 k=8 9 x9x8 t x4=3, x4x8=4x8 t=3 5 6 k=5 x6x5 k=6 7 x7x6 k=78 x8x7 k=89 x9

10、x8 t x5=-1, x5x8=3x8 t=-1 6 7 k=6 x7x6 k=7 8 x8x7 9 x9x7 t x6=1, x6x7=2x7 t=17 8 k=7 x8x7 x9x7 10.3.4 指向多维数组的指针和指针变量1、多维数组的地址如定义:int a34=1,3,5,7,9,11,13,15,17,19,21,23;说明:a, a0, a1 ,a2:数组名,本身不占内存,不存放数据 ,仅表示一个地址a0 a1 a21 3 5 7 9 11 13 15 17 19 21 23aa:代表整个数组首地址,设为2000 a+1:第1行首地址为:a+14 2=2008 a+2:第2行首

11、地址为:a+2 4 2=2016a数组a0a1a2a (2000)a+2 (2016)a+1 (2008)a0、a1、a2是一维数组名,而数组名代表数组首地址因此:a0 与 printf(“a=%x, a0=%x, a1=%x,a2=%x n”,a,a0,a1,a2); printf(“a+0=%x, a+1=%x,a+2=%x n”, a+0, a+1,a+2); for(i=0; i3; i+) for(j=0; j4; j+) printf(“%x,%x,%x n”,*(a+i)+j, ai+j, for(i=0; i3; i+) for(j=0; j4; j+) printf(“%d,%d,%d n”, aij, *(ai+j), *(*(a+i)+j); 运行结果:地址a=ffc0,a0=ffc0,a1=ffc8,a2=ffd0a+0=ffc0,a+1=ffc8,a+2=ffd0 *(a+0)+0=ffc0,a0+0=ffc0,int *p;for(p=a0; p a0+12; p+)if(p-a0)%4=0)printf(“n”);p

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

当前位置:首页 > 生活休闲 > 科普知识

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