资源描述:
《C语言(第六章).ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第六章指针信息学院自动化仪表研究所C语言程序设计本章主要内容指针概述地址·指针·指针变量多重指针指针变量作为函数参数指针与数组数组、指针与函数调用行指针指针数组指针与函数指向函数的指针变量返回指针值的函数一、指针概述1.地址(address)P201如果在程序中定义了一个“实体”(变量、数组、函数……),编译时系统就要给这些实体分配内存单元。分配规则:存储类型registerautostaticextern决定存储区域(动态存储区/静态存储区/寄存器组……)数据类型charintfloatdouble等决定占用的内存长度(字节数)和存储方式(ASCII码、补
2、码等)什么是内存单元“地址”?内存单元是以字节为单位,每个字节都有一个编号(即“地址”)。如果将内存比作一个旅馆,内存单元就好比“床位”,而实体则好比“旅客”。这些“旅客”(实体)中,有单人型(char)、夫妇型(int)、家庭型(float,long,double等),还有团体型(数组等)。每个“实体”占用的内存单元是不同的。如:chara;intb;floatc;intd[3];intmax()内存单元与地址main(){chara;intb;floatc;intd[3];intmax();……}地址通常我们关心的不是各个内存单元的具体地址值,而是每个实
3、体的“起始地址”。如何表示实体地址?实体地址表示法1:直接访问(实体名)普通变量a,b,c——&a,&b,&c数组d[3]——d(数组名),&d[0],&d[1],&d[2]对二维数组,可用单下标法表示每行首地址。如对charx[3][4],可用x[0]、x[1]、x[2]分别表示其第一、二、三行的首地址。函数max()——max(函数名)“入口地址”&取地址运算符(适用于普通变量或数组元素)实体地址表示法2:间接访问(指针)适合于地址运算(加减等)2.指针(pointer)实体地址的一种表示法(便于编程处理)。指针是一种特殊的数据类型——存放的是某个实体的
4、地址值。变量的“指针”变量在内存单元的占用的地址(首地址)那为什么不就叫“地址”呢?!实际上我们在C程序中用到的并不是代表地址的“指针”,而是另有所指啊!3.指针变量P202存放“指针”(地址值)的特殊变量。定义方法:类型标识符*变量名如int*a;char*b;float*c;通常在C语言中,所谓“指针”就是指“指针变量”。从现在开始,我们所说的“指针”除非另加说明,否则均表示“指针变量”。是不是说地址有”整型”,”字符型”,”实型”之分?为什么要使用指针变量?C程序中访问(读写)变量有两种方式:直接访问(按名单预留的座位入座)利用实体名访问变量。访问变量
5、的过程——变量(实体)名→定义时分配的地址→变量值好比“先坐再买票”看电影:来一个观众,分配一个空位给他去坐,并且还要在纸上记一个某人坐在哪里。这种方式对用户来说很方便(“直接就座”),但对系统来说,“找某人”就极不方便(间接:查名字→座号)。间接访问(先买票,后按号入座)把变量地址先存放在“指针”中,再通过“指针”访问变量。好比先买票(票—指针,座号—地址),再“按号入座”看电影。这种方式对用户来说属于“间接就座”,但对系统查找来说就很直接,且便于处理。尤其对于数组(团体),可通过指针简单自加或自减,对整个数组进行处理。习惯用语:若指针变量p存放了变量a的
6、地址,我们称“p指向a”。指针变量——不要谈”指”色变指针是C语言学习中的一大难点。难——难在概念。main(){inta,*p1,*p2=&a;a=100;p1=p2;*p1=*p2;……}学了半天,我还是一头雾水首先——搞定*p请看以下变量声明语句inta,*p1;charb,*p2;a,b普通变量(存放某个数值或字符)p1,p2指针变量(存放某个实体的地址)如果是int*a,p1;char*b,p2;变量声明时,如果变量名前带*号,表示该变量是个指针变量注意——不同的*p以下程序中哪些语句是错误的?main(){inta,*p;a=3;p=3;/*或者
7、p=a;*/p=&a;*p=a;/*或者*p=3*/}讨论:程序中引用变量时,对指针变量p,不带*号引用表示?带*号引用表示?两个特殊的运算符&变量名取该变量的地址*指针变量名取该地址处存放的值有关*p的小结变量声明时,*p表示定义了一个用来存放变量地址而非数据(数值、字符等)的指针变量。程序中引用时,*p表示取指针变量p所指变量的值。原来就这么简单!main(){inta,*p1,*p2=&a;a=100;p1=p2;*p1=*p2;……}*p——并非就这么简单*p的含义与p所指的对象有关如果p被定义成指向普通变量的指针变量,则*p代表该变量的值。如int
8、*p,a=5;p=&a;则*p代表变量a的值(5)。