没有合适的资源?快使用搜索试试~ 我知道了~
c语言指针,专业学习指针的好东西。直接下载
资源推荐
资源详情
资源评论
C 语言之指针、数组和函数
基本解释
、指针的本质是一个与地址相关的复合类型,它的值是数据存放的位置
(地址);数组的本质则是一系列的变量。
、数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保
持不变,只有数组的内容可以改变。指针可以随时指向任意类型的内存块,它
的特征是“可变”,所以我们常用指针来操作动态内存。
、当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针 。
问题:指针与数组
听说 与 是一致的,是不是这样呢?
答案与分析:
指针和数组存在着一些本质的区别。当然,在某种情况下,比如数组作为
函数的参数进行传递时,由于该数组自动退化为同类型的指针,所以在函数内
部,作为函数参数传递进来的指针与数组确实具有一定的一致性,但这只是一
种比较特殊的情况而已,在本质上,两者是有区别的。请看以下的例子:
上述两个变量的内存布局分别如下:
数组 需要在内存中占用 个字节的空间,这段内存区通过名字 来标志。
指针 则需要 个字节的空间来存放地址,这 个字节用名字 来标志。其中
存放的地址几乎可以指向任何地方,也可以哪里都不指,即空指针。目前这个
指向某地连续的 个字节,即字符串“。
另外,例如:对于 和 ,二者都返回字符‘,但是编译器产生的执
行代码却不一样。对于 ,执行代码是从 的位置开始,向后移 动 两个字
节,然后取出其中的字符。对于 ,执行代码是从 的位置取出一个地址,
在其上加 ,然后取出对应内存中的字符。
问题:数组指针
为什么在有些时候我们需要定义指向数组而不是指向数组元素的指针?如
何定义?
答案与分析:
使用指针,目的是用来保存某个元素的地址,从而来利用指针独有的优点,
那么在元素需要是数组的情况下,就理所当然要用到指向数组的指针,比如在
高维需要动态生成情况下的多维数组。
定义例子如下: 。
下面是一个例子:
!"",,#,",$,%##
&&定义一个指向数组的指针
'!(&&)')符号能够体现 的含义,表示是指向数组的指针
*+, ( &&将打印 !((,即
--; &&猜一猜,它指向谁?!?对了!
*+, ( &&将打印 !(,即
上述这个例子充分说明了数组指针—一种指向整个数组的指针的定义和使用。
需要说明的是,按照我们在第四篇讨论过的,指针的步进是参照其所指对
象的大小的,因此,--将整个向后移 动一个数组的尺寸,而不是仅仅向后
移 动一个数组元素的尺寸。
问题:指针数组
有如下定义:
./0121312314051167892:07
请分析这个定义的意义,并尝试说明这样的定义可能有哪些好处?
答案与分析:
前面我们谈了数组指针,现在又提到了指针数组,两者形式很相似,那么,
如何区分两者的定义呢?分析如下:
数组指针是:指向数组的指针,比如 8 $。
指针数组是:指针构成的数组,比如 8$。
至于上述指针数组的好处,大致有如下两个很普遍的原因:
、各个指针内容可以按需要动态生成,避免了空间浪费。
; 、各个指针呈数组形式排列,索引起来非常方便。
在实际编程中,选择使用指针数组大多都是想要获得如上两个好处。
问题:指向指针的指针
在做一个文本处理程序的时候,有这样一个问题:什么样的数据结构适合
于按行存储文本?
答案与分析:
首先,我们来分析文本的特点,文本的主要特征是具有很强的动态性,一
行文本的字符个数或多或少不确定,整个文本所拥有的文本行数也是不确定的。
这样的特征决定了用固定的二维数组存放文本行必然限制多多,缺乏灵活性。
这种场合,使用指向指针的指针有很大的优越性。
现实中我们尝试用动态二维数组(本质就是指向指针的指针)来解决此问
题:
图示是一个指针数组。所谓动态性指横向(对应每行文本的字符个数)和
纵向(对应整个文本的行数)两个方向都可以变化。
就横向而言,因为指针的灵活性,它可以指向随意大小的字符数组,实现
了横向动态性。
就竖向而言,可以动态生成及扩展需要的指针数组的大小。
下面的代码演示了这种动态数组的用途:
&&用于从文件中读取以 )&()结尾的字符串的函数
<=>?=
=>?=
1<:0??&&二维动态数组指针
5/1<:0??; &&指向当前输入字符串的指针
0?@:A/5/?.(;
0?@:A/86,?.(;
B(= )
"
*/5/?.C/86,?.
"
&&当前竖向空间已经不够了,通过 6 对其进行扩展。
/86,?.-$(&&每次扩展 $( 行。
1<61</86,?.
*:0??1<
"
/&&内存分配失败,返回
#
#
1</5/?.--&&横向“扩展”,指向不定长字符串
问题:指针数组与数组指针与指向指针的指针
指针和数组分别有如下的特征:
指针:动态分配,初始空间小
数组:索引方便,初始空间大
下面使用高维数组来说明指针数组、数组指针、指向指针的指针各自的适
合场合。
多维静态数组D各维均确定,适用于整体空间需求不大的场合,此结构可方
便索引,例 ((。
数组指针:低维确定,高维需要动态生成的场合,例 <(。
指针数组:高维确定,低维需要动态生成的场合,例 (!。
指向指针的指针:高、低维均需要动态生成的场合,例 <!。
问题:数组名相关问题
假设有一个整数数组 , 和' 的区别是什么?
答案与分析:
''(数组名 不占用存储空间。需要引用数组非字符串
首地址的地方,我一般使用'(,使用 容易和指针混淆,使用' 容易和非
指针变量混淆。
区别在于二者的类型。对数组 的直接引用将产生一个指向数组第一个元
素的指针,而' 的结果则产生一个指向全部数组的指针。例如:
"#
(
& 指向 (所在的地方 &
<&<(&
'&编译器会提示你错误,&
&显示整数指针与整数数组指针不一样 &
问题:函数指针与指针函数
请问:如下定义是什么意思:
=
=
答案与分析:
首先清楚它们的定义:
指针函数,返回一个指针的函数。
剩余11页未读,继续阅读
资源评论
luo320
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功