- 1、本文档共34页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
8.1.3指针变量.ppt
第八章 指 针
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可以为赋值表达式的左值。
请看以下程序及运行结果:;例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编译生成的,在程序运行过程中用户是不允许修改的。指针变量的值是地址、指向了其它程序实体,其值在程序运行过程中允许用户修改。指针与整数是两种不同的数据结构、C编译对二者的加减运算规则是需要制定的。; C编译重载了双目运算符+、当运算对象其一为指针时、p+n的值实际按p+n*sizeof(指针所指类型名)计算,表达式的值还是相同属性的指针。sizeof(指针所指类型名)我们姑且称之为指针步进值、实际上它是指针隐含的非常重要的固有属性!指向不同数据类型的指针变量不可以相互赋值。
数据的常量指针不外于如下形式:变量名、一维数组名、多维数组名及非最低级别的数组元素名(参见第7章)等,它们的步进值在定义变量或数组时C编译就可以记录下来;指针变量的步进值其实在定义时也作出了明确规定,既指针所指数据类型空间大小;后面还会介绍如何定义具备指定步进值的指针变量。
p-n;p++;p--等操作、C编译也重载了相关运算符,实际计算方式按p+n的原理由相应操作不难推出。
请分析如下程序执行结果(VC环境),特别注意各指针步进值。;例8_2 指针步进值
#includestdio.h
void main()
{char ch;int num;float f;double ff;
char *pch=ch;int *pnum=num;
float *pf=f;double *pff=ff;
int a1[4]={13,14,15,16};int *pa1=a1;
int a2[3][4]={{1,3,
您可能关注的文档
- 6.法律思维与法律方法.ppt
- 6.空气质量传感器诊断流程图.doc
- 6测试时间安排和数据传送时点.doc
- 7-3VHDL词法文件.ppt
- 7.1.2程序设计语言的特点.ppt
- 7.1可编程逻辑器件的发展和分类.ppt
- 7.1宏功能模块概述.ppt
- 7.2.1正余弦旋转变压器的工作原理.ppt
- 7.2下行响应消息.doc
- 7.2计算机网络技术-电子政务与电子政府.doc
- 2024年部编版九年级下册语文期末检测试卷及答案 .pdf
- 小学三年级语文阅读练习题(十篇) .pdf
- 大蒜购销合同范本完整版doc(2024两篇) .pdf
- 学年全国初中九年级下语文部编版月考试卷(含答案解析考点)014556.pdf
- 2024必威体育精装版卫生应急知识必考题库及答案 .pdf
- 完整版六年级下册数学应用题60题附参考答案【考试直接用】 .pdf
- 2019-2020新人教版四年级下册数学总复习资料归类整理 .pdf
- 2024电工证考试题模拟试题(题库汇总) .pdf
- 学校2024年法制工作计划 工作计划 法制 学校 .pdf
- 大学生职业生涯规划——决策流程与决策风格满分答案 .pdf
文档评论(0)