- 1、本文档共47页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c语言8(指针)
第八章 指 针 基本问题 1.为什么要使用指针 C语言作为高级程序设计语言与其它高级程序设计语言的不同之处在于C语言能直接对内存的物理地址进行操作,也就是允许利用变量的地址访问变量或利用数组的地址访问数组元素。 如果C语言要对内存地址操作就需要用指针。 2.什么是指针 指针就是存放数据的内存单元地址,它是一种数据类型。 3.变量与内存单元地址的关系 (1)程序中可以用变量来存放各种数据,因此每个变量都需要分配连续的字节。 (2)由于数据类型的不同,每个变量需要分配的字节数目也不同。 (3)对源程序进行编译时,每遇到一个变量,就给它分配内存单元,同时在“变量与地址对照表”中记录变量的名称、数据类型和地址。 例如:在程序清单中有下列数据定义语句: char ch=A;short s=5;float f; 则分配的内存单元如图所示,“变量与地址对照表”如表所示。 4.数组与内存单元地址的关系 (1)对一个数组来说,所分配的内存单元必须是连续的。每个数组元素占用连续的内存单元。 (2)一个数组占用的总字节数等于数组长度×每个数组元素占用的字节数。 (3)对源程序进行编译时,每遇到一个数组,就给它分配内存单元,同时在“数组与地址对照表”中记录数组名、数据类型、数组长度和数组首地址。 例如:在程序清单中有下列数据定义语句: short a[3]={1,2,3}; 则分配的内存单元如图所示,“数组与地址对照表”如表所示。 (4)一个数组的首地址,就是第一个元素(即下标为0的数组元素)的地址。 (5)如果知道数组a的首地址和数据类型,可以通过下列公式计算出每个数组元素的地址,从而找到每个数组元素。 数组元素a[i]的地址=数组首地址+i*数据类型所占的字节数 8.1 指针变量 1.什么是指针变量 指针所表示的地址如果要存放,也必须要存放在变量中,而存放地址值的变量就是指针变量。 一、指针变量的定义和初始化 1.定义格式:数据类型符 *指针变量名[=初值]; 2.功能:定义指向“数据类型”的变量或数组的指针变量,同时给其赋初值。 3.说明: (1)指针变量名的构成规则是标识符,前面必须有*号。 (2)数据类型可以选取任何基本数据类型,也可以用以后要介绍的其他数据类型。但需要注意的是:定义指针变量的数据类型不是指针变量中存放的数据类型,而是它将要指向的变量或数组的数据类型。 (3)定义成某种数据类型的指针变量,只能用来指向同种数据类型的变量或数组。 (4)给指针变量赋的“初值”必须是地址值,可以是 “变量名”、“数组元素”、“数组名”。这里的变量或数组必须事先已定义过。 例如:int a; int *p=a; /*指针变量p指向了变量a*/ float f1,f[5],*p1=f1,*p2=f,*p3=f[2]; 二、取地址运算符和指针运算符 1.运算符 2.说明 (1)取地址运算符()的运算对象必须是已定义过的变量、数组元素,但不可以是数组名。 int a,b[10],*p; p=a; (或p=b[2];)是正确的。 p=b; (是错误的) p=b;是正确的。 (2)指针运算符(*)的运算对象必须是地址。可以是已赋值过的指针变量,也可以是变量或数组元素的地址,但不能是整数、也不能是非地址型的变量。运算结果就是地址对应的对象。 例如:int a,b[5],*p=a,*p1=b; a=10; *p=10; *a=10; b[0]=5; *p1=5; *b[0]=5; 8.2 指针变量的使用 一、指向变量的指针变量的使用 1.使用说明: (1)如果要使用指针变量指向某个变量时,首先要定义变量和同类型的指针变量; (2)将变量的地址赋值给指针变量,则指针变量就可以指向该变量; (3)当指针变量一旦指向了某个变量后,就可以利用指针变量来使用该变量。 2.举例说明 例1:指针变量引用举例。 假设有如下的定义语句,则列表给出了几个指针引用的表达式及其含义。 int a[6]={3,7,11,13,17,19},b,*p,*q; 例2:阅读下列程序看输出结果 #include stdio.h void main() { int j=28,k,*p=j; char c1,c2=f,*q; k=*p*2-3; q=c1; *q=c2+1; printf(k=%d\nc1=\%c\\n,k,*q); } 例3:输入3个整数,按从小到大的顺序输出。要求用指针变量处理。 先考虑不用指针变量编程: void main() { int a,b,c,t; scanf(%d,
您可能关注的文档
最近下载
- 福彩市场管理员培训.pptx
- 7.2化石能源的合理利用教学设计---2024-2025学年九年级化学人教版(2024)上册.docx
- 35kv电缆头制作监理旁站记录.docx
- Unit 4 Plants around us Part C Make a paper garden(课件)人教PEP版(2024)英语三年级上册.pptx
- 中班综合《有趣的螃蟹》PPT课件.ppt
- 顺丰快递企业运作模式探析论文.pdf VIP
- 幼儿园课件:婴幼儿主被动操(1).ppt
- 《PCB设计与制作》课程标准.doc VIP
- 2020明辉学校开展“读书月系列活动”简讯美篇(可编辑).pdf VIP
- 行车轨道更换施工方案.docx
文档评论(0)