C语言程序设计--chapter6-1

上传人:宝路 文档编号:49899946 上传时间:2018-08-04 格式:PPT 页数:85 大小:1.37MB
返回 下载 相关 举报
C语言程序设计--chapter6-1_第1页
第1页 / 共85页
C语言程序设计--chapter6-1_第2页
第2页 / 共85页
C语言程序设计--chapter6-1_第3页
第3页 / 共85页
C语言程序设计--chapter6-1_第4页
第4页 / 共85页
C语言程序设计--chapter6-1_第5页
第5页 / 共85页
点击查看更多>>
资源描述

《C语言程序设计--chapter6-1》由会员分享,可在线阅读,更多相关《C语言程序设计--chapter6-1(85页珍藏版)》请在金锄头文库上搜索。

1、 设一个函数process,在调用它的时候, 每次实现不同的功能。输入a和b两个数, 第一次调用的时找出其中的大者,第二次 调用的时找出其中的小者。第三次调用求 两者之和。第六章 指 针指针是C语言的一个重要概念,也是C语言的一个重 要特色。深刻理解和正确使用指针是学习本章的基本 要求。C程序设计中使用指针可以:使程序简洁、紧凑、高效有效地表示复杂的数据结构动态分配内存得到多个函数返回值数据存储区6.1 指针概述6.1.1 地址与指针(一)地址与取地址运算1.地址34.58.64121120abcde f10101012101410181022 1023int a=3,b=4; float c

2、=4.5,d=8.6; char e=x,f=y;编译或函数调用时 为其分配内存单元内存中每个字节有 一个编号-地址数据占有的 字节数由它 的类型决定变量是对程序中数 据存储空间的抽象2.取地址运算对普通变量:通过取地址运算符“ i=3; 这种访问方式只需要变量本身就得到了该变量的全部 信息,不需要其它内容,是直接的。数据存储区34.58.64121120abcde f10101012101410181022 10232. 间接访问200020022004200620082010papbpcpdpepf101010121014101810221023指针变量通过指针实现对变量的访问方式,称为间

3、接访问。间接对变量的访问方式: 首先要定义一个指针变量; 然后将一个同类型变量的地址赋给该指针变量(这时我 们称指针变量指向该变量);int *i_point,i=3;i_point=i=3i_point变量的指针变量的地址存放变量地址的变量指针变量指针变量是一个特殊的变量,只能存放变量的地址 而不能用来存放其它类型的数据。指针指向的变量 称为目标变量。6.1.2 指针的类型与指针的定义指针是有类型的,它的类型就是它所指向的实体的类型。定义一个指针变量格式:存储类型 类型标识符 *指针变量名;例:int *a,*b;char *c, *ch;float *p1, *p2, *p;指针变量定义后

4、, 值不确定。注意: *p 与 p 的区别,p才是指针变量; 指针变量只能指向定义时所规定类型的变量; 指针变量定义后,值不确定,应用前必须先赋值;指针变量的赋值和初始化赋值语句: int i=3,*p;p不定i3p = i的地址3int *p; float a; p=int *p= int i;int i; int *p= int *q=p;int i; static int *p=int i=3,*p=初始化: 一般形式:存储类型 数据类型 *指针名=初始地址值;20002010i的地址指针变量 的地址i_pointi=106.1.3 指针变量的引用有关指针的运算符取变量地址运算符。i_p

5、oint=2000i_point -指针变量,它的内容是地址量 *i_point -指针的目标变量,它的内容是变量值i *i_pointint *p;*p=i;printf(“%d“,*p);指针变量必 须先赋值, 再使用main( ) int i=10,k;int *p=*p=i;printf(“%d“,*p);危险 !指针变量可进行的操作int a,b,*p1,*p2,*p3; 输出: printf(“%x,%x“,p1,p2);printf(“%d,%d“,*p1,*p2); 增减: p+; p-; p+=4; (只能和整数运算)*p+; *p-; 两指针加减: p1-p2; p1+p2

6、; 两指针比较: if(p1p2) if(p1p2, p1*pt1) *pt1=dati;if(dati copy.exe source.c temp.c有3个字符串参数的命令行带参数的main函数形式:命令行中参数个数指针数组,保存命令行 参数中各字符串首地址命令行参数的说明形参也可以用其它名字,习惯上为 argc 和 argvargc 和 argv 的值得获得:系统调用main函数时自动传递。如有参程序myprog.c, myprog.exe 执行 C:myprog argument1 argument2编译和链接argc的值为3argv2argv1argv0main( int argc,

7、 char *argv ) int i;for(i=1; i test Computer and C Language则:arg1: Computerarg2: andarg3: Carg4: Languageargv1 argv2 argv3 argv4Computer and C Languageargvargv0testmain(int argc, char *argv )带参main函数的定义还可以写成:main(int argc, char *argv)main(int argc, char argv )6.3.6 指针数据小结6.4.1 常用指针类型变量归纳定义义形式含 义义int

8、 *pp为为指向整型数据的指针变针变 量int(*p)np为为指向含n个元素的一维维整型数组组的指针变针变 量int (*p)( )p为为指向函数的指针变针变 量,该该函数返回整型数int *pnn个指向整型数据的指针变针变 量组组成的指针针数组组int *p( )p为为返回指针针的函数,该该指针针指向一个整型数据int *pp为为指针变针变 量,它指向一个指向整型数据的指针变针变 量一级指针变量与一维数组的关系: 数组名是指针(地址)常量;int *p; 与 int a10; 系统只给p分配能保存一个指针值的内存区(一般2字节 );而给a分配2*10字节的内存区; 若p=a; p+i 是 a

9、i的地址; 数组元素的表示方法:下标法和指针法:若p=a,则pi ai *(a+i) *(p+i); 形参数组实质上是指针变量,即int p int *p;二维数组与一维数组指针变量的关系:int a510 与 int (*p)10; 二维数组名是指向有n个元素的一维数组的指针常量; aij(ai)j(*(a+i)j(*p)j 二维数组形参实际上是一维数组指针变量,即int x 10 int (*x)10;系统只给p分配能保存一个指针值的内存区(一般2 字节);而给a分配2*5*10字节的内存区。 变量定义(不是形参)时两者不等价: p=a+i; 使p指向二维数组的第i行,p+,指向下一行;二

10、级指针与指针数组的关系:int *p; 与 int *a10; 指针数组名是二级指针常量; 若p=a; p+i 是ai的地址;系统只给p分配能保存一个指针值的内存区;而给a 分配10块(每块一般是2字节)内存区,每块可保存一 个指针值。 指针数组作形参,int *p 与int *p完全等价,但作为 变量定义两者不同:6.4.2 指针的运算(一)指针与整数相加(减)移动指针的位置,以其指针类型长度为单位。ppppppint型数据float型数据(二)指针的关系运算与相减运算两个指针变量比较: 比较的结果是两个元素在数组中的前后位置,若两个 指针相等表示指向的是同一个元素。此类运算必须是两个指针变

11、量指向同一个数组的元素两个指针变量相减: 两个指针变量的结果是两个指针之间的元素个数。(三)指针赋值只能将对应类型的变量地址赋值给指针float f1,f2,*pf; pf= pf=同类型指针间可以相互赋值int a,b,*pa=pa=pb;指针增1、减1注意“+“和“-“运算与“*“运算优先级相同,它们在同 一个表达式中时,应按照结合性决定运算顺序。例:int x =2,3,7,9; *px=x; *(px+1)=5;y = * +px;y = + *px;536.4.3 指向void类型的指针void 指针类型为“空类型”,它可定义一个指针变量,但 不指定它是指向哪一种类型数据的。char *p1; void *p2; p1 = (char *) p2; p2 = (void *) p1;函数也可以定义为void *类型: void *fun(int x,int y)表示函数 fun 返回的是一个地址,它指向“空类型”。对于这种类型的指针在给另一个指针变量赋值时,要进 行强制类型变换,使之适合于被赋值的变量的类型。

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

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

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