网站大量收购闲置独家精品文档,联系QQ:2885784924

第八讲指针8.1指针的基本概念8.1.1指针的主要用途及特点.ppt

第八讲指针8.1指针的基本概念8.1.1指针的主要用途及特点.ppt

  1. 1、本文档共34页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
关于[]()*三个声明符的补充说明: [],()具有最高优先级和从左向右的结合性; *具有次高优先级和从右向左的结合性; 当声明语句中含有两个以上的上述声明符时,往往造成声明语句的难理解性.理解它们的关键是要搞清楚它们的优先级关系与结合性.请看下面例题: 例e1: float * (*p[2]) (int,int); ①p是一个具有两个元素的数组; ②每个元素都是一个指针; ③这些指针是指向具有两个int型参数的返回float形指针的函数. 例e2: char (*(*p[ ])( )) [ ]; ①p是一个指针数组; ②每个元素(指针)指向一个函数,该函数的返回值是指针(另一个指针); ③函数指针指向字符型数组. 选讲 设a=125.5、编程验证IEEE754浮点数存储标准 (参考chapter 0 C语言补充知识) #includestdio.h int main() { float a=125.5; char *p=(char *)a; printf(%d\n,*p); printf(%d\n,*(p+1)); printf(%d\n,*(p+2)); printf(%d\n,*(p+3)); return 0; } 即 125.5用四字节按0、0、-5、66从低位字节到高位字节保存。 本章习题 第八章 指 针 8.1 指针的基本概念 8.1.1 指针的主要用途及特点 能更为方便、更为有效地使用字符串和数组; 指针作函数参数进行函数调用可实现多个数据共享; 使用指针能有效表示更为复杂的数据结构; 程序运行过程中、利用指针动态进行内存分配与释放。 8.1.2 利用指针访问数据 指针就是内存的地址,内存按字节编址。C编译依据变量定义时指定的类型在内存中分配相应大小的空间(字节数)以保存变量值。使用变量名就可以存取变量的值,这种方法称之为直接访问方式。 C编译引入了指针变量、专门用于存放其它变量的地址,如果先将某变量的地址存放于一指针变量中,利用指针变量名就可以引用指针变量的值(即指针指向的变量的地址),有了变量的地址当然可以访问该变量。这种利用指针存取它所指向的变量值的方法称之为间接访问方式。 在32位C编译中指针变量用4字节保存(如VC)、16位C编译为2字节(如turbo c)。 8.1.3 指针变量 定义格式: 类型标识符 *标识符; 如:int *p;定义了一个只可以指向整形数的指针变量p,这里的*为指针运算符、驱动C编译为p开辟内存空间。p的值是地址、没什么类型可言;类型标识符标识的是p所指数据的数据类型,不可以将p指向其它类型的数据! 取地址运算符和间接引用运算符* C编译为我们定义了运算符、利用它可以获得程序实体的地址。如:int a;定义了整形变量a、a就是a的地址。 结合右图理解如下语句: int i=3;//假设变量i的地址为2000。 int *p; //假设p的地址为3010且p只可以存 放整形数的地址。 p=i; //p指向了i。 C编译又为我们定义了间接引用运算符*,用于定义语句以外的其它地方,它的运算对象为指针、可以获得指针所指对象的值。如上例中:*p就是i。与其它表达式不同、 *p可以为赋值表达式的左值。 请看以下程序及运行结果: Turbo C环境示意图 例8_1_3 #includestdio.h void main() {int i,*p; p=i; *p=5; printf(i=%d,*p=%d\n,i,*p);} 几点说明: ① 指针变量p的内容为地址量;*p为指针p的目标量,内容为数据,即指针变量p所指向的变量的值。 p=i; 是将变量i的地址赋给指针变量p。 *p=j; 是将变量j的值赋给目标变量*p(即i)。 ② *运算和运算互为逆运算。 (*p)的结果为p,即变量*p的地址; *(i)表示访问变量i的地址,其结果就是i本身。 ③ p为指针变量p的地址。 8.2 指针的算术运算与关系运算 一维数组名就是第一个数组元素的首字节地址,如果定义一个指针变量、其所指数据类型与数组元素类型相同并将一维数组名赋给该指针变量,利用指针就可以间接访问数组元素。采用移动指针(下一数据地址=当前指针+步进值)去访问连续存储的同类型数据、毫无疑问是十分便捷的方法。 ①指针与整数的加减运算 指针(即地址)可分为指针常量和指针变量;所有程序实体(包括指针变量)的指针是C编译生成的,在程序运行过程中用户是

文档评论(0)

133****0075 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档