电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本
换一换
首页 金锄头文库 > 资源分类 > DOC文档下载
分享到微信 分享到微博 分享到QQ空间

水滴石穿C语言之指针、数组和函数

  • 资源ID:473698931       资源大小:20.51KB        全文页数:5页
  • 资源格式: DOC        下载积分:10金贝
快捷下载 游客一键下载
账号登录下载
微信登录下载
三方登录下载: 微信开放平台登录   支付宝登录   QQ登录  
二维码
微信扫一扫登录
下载资源需要10金贝
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
1、金锄头文库是“C2C”交易模式,即卖家上传的文档直接由买家下载,本站只是中间服务平台,本站所有文档下载所得的收益全部归上传人(卖家)所有,作为网络服务商,若您的权利被侵害请及时联系右侧客服;
2、如你看到网页展示的文档有jinchutou.com水印,是因预览和防盗链等技术需要对部份页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有jinchutou.com水印标识,下载后原文更清晰;
3、所有的PPT和DOC文档都被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;下载前须认真查看,确认无误后再购买;
4、文档大部份都是可以预览的,金锄头文库作为内容存储提供商,无法对各卖家所售文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;
5、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据;
6、如果您还有什么不清楚的或需要我们协助,可以点击右侧栏的客服。
下载须知 | 常见问题汇总

水滴石穿C语言之指针、数组和函数

基本解释1、指针的本质是一个与地址相关的复合类型,它的值是数据存放的位置(地址);数组的本质则是一系列的变量。2、数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存。3、当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。问题:指针与数组听说char a与char *a是一致的,是不是这样呢?答案与分析:指针和数组存在着一些本质的区别。当然,在某种情况下,比如数组作为函数的参数进行传递时,由于该数组自动退化为同类型的指针,所以在函数内部,作为函数参数传递进来的指针与数组确实具有一定的一致性,但这只是一种比较特殊的情况而已,在本质上,两者是有区别的。请看以下的例子:char a = "Hi, pig!"char *p = "Hi, pig!"上述两个变量的内存布局分别如下:数组a需要在内存中占用8个字节的空间,这段内存区通过名字a来标志。指针p则需要4个字节的空间来存放地址,这4个字节用名字p来标志。其中存放的地址几乎可以指向任何地方,也可以哪里都不指,即空指针。目前这个p指向某地连续的8个字节,即字符串“Hi, pig!”。另外,例如:对于a2和p2,二者都返回字符i,但是编译器产生的执行代码却不一样。对于a2,执行代码是从a的位置开始,向后移动2两个字节,然后取出其中的字符。对于p2,执行代码是从p的位置取出一个地址,在其上加2,然后取出对应内存中的字符。问题:数组指针为什么在有些时候我们需要定义指向数组而不是指向数组元素的指针?如何定义?答案与分析:使用指针,目的是用来保存某个元素的地址,从而来利用指针独有的优点,那么在元素需要是数组的情况下,就理所当然要用到指向数组的指针,比如在高维需要动态生成情况下的多维数组。定义例子如下: int (*pElement)2。下面是一个例子:int array23 = 1,2,3,4,5,6;int (*pa)3; /定义一个指向数组的指针pa = &array0; / '&'符号能够体现pa的含义,表示是指向数组的指针printf ("%d", (*pa)0); /将打印array00,即1pa+; / 猜一猜,它指向谁?array1?对了!printf ("%d", (*pa)0); / 将打印array10,即4上述这个例子充分说明了数组指针一种指向整个数组的指针的定义和使用。需要说明的是,按照我们在第四篇讨论过的,指针的步进是参照其所指对象的大小的,因此,pa+将整个向后移动一个数组的尺寸,而不是仅仅向后移动一个数组元素的尺寸。问题:指针数组有如下定义:struct UT_TEST_STRUCT *pTo2MAX_NUM;请分析这个定义的意义,并尝试说明这样的定义可能有哪些好处?答案与分析:前面我们谈了数组指针,现在又提到了指针数组,两者形式很相似,那么,如何区分两者的定义呢?分析如下:数组指针是:指向数组的指针,比如 int (*pA)5。指针数组是:指针构成的数组,比如int *pA5。至于上述指针数组的好处,大致有如下两个很普遍的原因:a)、各个指针内容可以按需要动态生成,避免了空间浪费。b)、各个指针呈数组形式排列,索引起来非常方便。在实际编程中,选择使用指针数组大多都是想要获得如上两个好处。问题:指向指针的指针在做一个文本处理程序的时候,有这样一个问题:什么样的数据结构适合于按行存储文本?答案与分析:首先,我们来分析文本的特点,文本的主要特征是具有很强的动态性,一行文本的字符个数或多或少不确定,整个文本所拥有的文本行数也是不确定的。这样的特征决定了用固定的二维数组存放文本行必然限制多多,缺乏灵活性。这种场合,使用指向指针的指针有很大的优越性。现实中我们尝试用动态二维数组(本质就是指向指针的指针)来解决此问题:图示是一个指针数组。所谓动态性指横向(对应每行文本的字符个数)和纵向(对应整个文本的行数)两个方向都可以变化。就横向而言,因为指针的灵活性,它可以指向随意大小的字符数组,实现了横向动态性。就竖向而言,可以动态生成及扩展需要的指针数组的大小。下面的代码演示了这种动态数组的用途:/ 用于从文件中读取以 '0'结尾的字符串的函数extern char *getline(FILE *pFile);FILE *pFile;char *ppText = NULL; / 二维动态数组指针char *pCurrText = NULL; / 指向当前输入字符串的指针ULONG ulCurrLines = 0;ULONG ulAllocedLines = 0;while (p = getline(pFile)if (ulCurrLines >= ulAllocedLines)/ * 当前竖向空间已经不够了,通过realloc对其进行扩展。ulAllocedLines += 50; / 每次扩展50行。ppText = realloc (ppText, ulAllocedLines * (char *);if (NULL = ppText)return; / 内存分配失败,返回ppTextulCurrLines+ = p; / 横向“扩展”,指向不定长字符串问题:指针数组与数组指针与指向指针的指针指针和数组分别有如下的特征:指针:动态分配,初始空间小数组:索引方便,初始空间大下面使用高维数组来说明指针数组、数组指针、指向指针的指针各自的适合场合。 多维静态数组:各维均确定,适用于整体空间需求不大的场合,此结构可方便索引,例a1040。 数组指针:低维确定,高维需要动态生成的场合,例ax40。 指针数组:高维确定,低维需要动态生成的场合,例a10y。 指向指针的指针:高、低维均需要动态生成的场合,例axy。问题:数组名相关问题假设有一个整数数组a,a和&a的区别是什么?答案与分析:a = &a = &a0,数组名a不占用存储空间。需要引用数组(非字符串)首地址的地方,我一般使用&a0,使用a容易和指针混淆,使用&a容易和非指针变量混淆。区别在于二者的类型。对数组a的直接引用将产生一个指向数组第一个元素的指针,而&a的结果则产生一个指向全部数组的指针。例如:int a2 = 1, 2;int *p = 0;p = a; /* p指向a0所在的地方 */x = *p; /* x = a0 = 1*/p = &a; /* 编译器会提示你错误,*/*显示整数指针与整数数组指针不一样 */问题:函数指针与指针函数请问:如下定义是什么意思:int *pF1();int (*pF2)();答案与分析:首先清楚它们的定义: 指针函数,返回一个指针的函数。 函数指针,指向一个函数的指针。可知: pF1是一个指针函数,它返回一个指向int型数据的指针。 pF2是一个函数指针,它指向一个参数为空的函数,这个函数返回一个整数。

注意事项

本文(水滴石穿C语言之指针、数组和函数)为本站会员(夏**)主动上传,金锄头文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即阅读金锄头文库的“版权提示”【网址:https://www.jinchutou.com/h-59.html】,按提示上传提交保证函及证明材料,经审查核实后我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.