- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
华中科技大学计算机学院C语言课程组 C语言与程序设计The C Programming Language 8.1 指针的概念与指针的使用 8.1.1 指针的概念 数据(变量、常量)(根据类型)占有一定数目的连续存储单元; 数据的连续存储单元首地址称为数据的地址。 变量的地址称为指针,存放地址数据的变量称为指针变量。 指针也是一种变量,也要占用一定的内存单元。指针的特殊之处在于它存放的是另一个变量所占存储单元的起始地址。 指针变量的类型由其基类型决定. 基类型是指针变量所指(即所指向)变量的数据类型。 因此,称指向某种类型变量的指针为该类型的指针。 如:指向整型变量的指针称为整型指针,指向字符型变量的指针称为字符指针等。 不管是何种类型的指针,所占的存储与机器字长相当.如:16位机,指针占2字节,… 思考: 为什么指针有类型? 8.1.2 指针的声明 声明指针的一般形式: T *标识符1,*标识符2,…, *标识符n; 其中,T是数据类型。*是指针说明符,用于将其说明的标识符说明为指针类型。标识符1,标 识符2,…,标识符n是T类型的指针的名字. 例8.1声明指针并解释其含义。 char *pc1,*pc2; int *pi; float *pf; 指针变量也可以在声明的时候对其进行初始化,但必须用所指变量的地址进行初始化。初始化后的指针将指向以初值为地址的变量。 例8.2 声明指针并初始化,并且解释其含义。 int x=10,*p=x; 解释:该语句先声明了整型变量x,并对其进行了初始化。接着声明了一个基类型为int的整型指针变量p,并且用变量x的地址对其进行初始化,使其指向整型变量x 错误的声明: int *p=x,x=10; 例8.3 解释以下一些复杂声明的含义 int (*p1)[3]; double *p2[5]; char (*fp)(int,int); int *pf(float a); int (*fp_ary[2])(char *,int *); 例8.3-continue (1)int (*p1)[3]; p1是指向有3个元素整型数组的指针。 (2)double *p2[5]; p2是有5个元素的double类型的指针数组。即:该指针数组中的每一个元素都是一个double类型的指针,因此每个元素都可以指向一个double类型的变量。 (3)char (*fp)(int,int); fp是一个函数指针,所指函数有2个整型形参,并且返回值的类型为char类型。 例8.3-continue (4)int *pf(float a); pf是一个有1个float类型形参的float类型的指针函数。所谓T类型的指针函数指的是该函数返回值的数据类型是T *类型的指针。 (5)int (*fp_ary[2])(char *,int *); fp_ary是一个有2个元素的函数指针数组。即:该函数指针数组中的每一个元素都是一个函数指针。每个函数指针所指的函数都有2个形参,第1个形参是字符指针,第2个形参是整型指针,并且所指函数返回值的类型为int类型。 8.1.3 指针的使用 在声明指针变量的前提下 1.指针的使用首先要获取变量的地址作为指针值; 2.然后要将该指针值赋给指针变量,建立指针变量与被指变量间的指向关系; 3.接下来就是如何通过指针变量来间接访问和操作指针所指的变量。 单目在C语言中表示取地址运算,它只有唯一一个右操作数。 单目与其右操作数组成一个表达式,该表达式的操作语义是取其操作数的地址并作为表达式的值。 该表达式的一般使用形式是: 操作数 根据表达式的操作语义可知,操作数必须是一个左值表达式。 如果操作数的类型是T,则表达式操作数的类型是T *。 悬挂指针: 指针的声明只是创建了指针变量,获得了指针变量的存储,但并没有给出指针变量指向那个具体的变量,此时指针的值是不确定的随机值,指针处于“无所指”的状态。此时称指针为悬挂指针。 例如, int *p; 该语句说明p是一个整型指针变量,但p的值是不确定的随机值,此时p为悬挂指针。 注意:在没有对指针进行赋值操作时就使用它,将会产生一些不可预计的后果,一般是使程序不能正常运行。因此要避免使指针悬挂。 指针的赋值操作 通过单目操作获取了变量的地址,但是没有将其赋给其他指针变量,使变量处于“未被指”的状态; 而指针的赋值操作就是联系“无所指”指针与“未被指”变量的桥梁; 指针的赋值操作建立起了指针变量与被指变量之间指向关系,使得利用指针变量来访问和操作被指变量成为可能; 指针赋值通过赋值操作符“=”进行;
文档评论(0)