没有合适的资源?快使用搜索试试~ 我知道了~
c++ “指针”学习建议
需积分: 0 1 下载量 127 浏览量
2018-06-08
14:06:30
上传
评论
收藏 137KB DOC 举报
温馨提示
试读
33页
c++ “指针”学习建议。非常不错的建议,很适合初学者学习使用。
资源推荐
资源详情
资源评论
一.对于众多人提出的 中指针难学的问题做个总结:
指针学习不好关键是概念不清造成的,说的简单点就是书没有认真看,指针的学习犹如人在学习饶口令不多看多
学多练是不行的,下面是两个很经典的例子,很多书上都有对于学习的重点在于理解 和 的理解,他们并不相同,
所表示的其实就是变量 本身, 表示的是变量 在内存中的地址,如果想明白可以输出观察 ,当
定义了 后对 的理解的问题。仔细阅读和联系下面的两个例子我想指针问题就不是难点了!
!定义 ! 两个整形变量用于输入两个整数
"#$"#%"#"定义三个指针变量
&''!格式化输入 ! 的值
"#$把指针变量 "#$ 的值指向变量 的地址
"#%!把指针变量 "#% 的值指向变量 ! 的地址
&!
"#""#$这里的 "#" 是用于临时存储 "#$ 的值也就是变量 的地址的
"#$"#%把 "#% 的值赋予 "#$
"#%"#"
由于 "#$ 的值已经改变无法找到利用前面临时存储的也就是 "#" 找回原 "#$ 的值赋予
"#%打到把 "#$ 和 "#% 值对换的目的
(
")&''"#$"#%利用"#$ 和"#% 也就是分辨指向 ! 和 的方法把值显示屏幕上
(
此题需要注意和了解是的此法并没有改变变量 ! 的值只是利用指针变量分别存储 和 ! 的地址然后再把那两个指
针变量的值对换一下其实就是存储在指针变量里面 与 ! 的地址对换在利用"#$ 和"#% 的方式把调换后的
值显示出来这里的"#$ 实际就是 此中算法并非真的改变 ! 的值而是利用指针进行地址交换达到大小排序的目
的
!定义 ! 两个整形变量用于输入两个整数
"#$"#%定义三个指针变量
&''!格式化输入 ! 的值
"#$把指针变量 "#$ 的值指向变量 的地址
"#%!把指针变量 "#% 的值指向变量 ! 的地址
")"#$"#%调用自定义的排序涵数把 ! 的地址传递给 "#$ 和 "#%
")&''!打印出 ! 的值
(
")"$"%
"$"%定义形式参数 "$"% 为指针变量
"建立临时存储变量
&"$"%如果"$"%注意这里的"$ 和"% 其实就是 和 !
""$利用变量 " 用于临时存储"$ 和就是 的值
"$"%将"$ 的值也就是 的值换成"% 的值也就是 ! 的值等价于 !
"%"将"% 的值也就是 " 的值等价于 !"
(
(
注意*此题与上题不同的是直接改变了 于 ! 的值达到真实改变的目的
二.C++指针使用方法解惑
+,-)../0.1
仔细看一下这种声明方式,确实有点让人迷惑。
下面以 ,&$( 23-.455"678); 为例来说明这个问题。在某种意义上,和是意思
相对的两个东西,把它们放在一起有什么意义呢?。为了理解指针的这种做法,我们先复习一下 --编程中无所不
在的指针概念。我们都知道 23-.455的意思:指向某个对象的指针,此对象的类型为 23-.455。 9
&$(23-.455"2:-);
例如: 23-.455";23-.455;
&$(");
上面这段代码的这种处理方法想必谁都用过,创建一个 23-.455 对象,然后将它传入 &$ 函数。现在假设此函数
要修改 "2:-: ,&$(23-.455"2:-)
<57("2:-);
"2:-其它对象的指针
(
第二条语句在函数过程中只修改了 "2:- 的值。并没有修改调用者的变量 " 的值。如果 " 指向某个位于地址
===>== 的对象,当 &$ 返回时,它仍然指向这个特定的对象。(除非 &$ 有 !7 将堆弄乱了,完全有这种
可能。)
现在假设你想要在 &$ 中修改 " 的值。这是你的权利。调用者传入一个指针,然后函数给这个指针赋值。以往
一般都是传双指针,即指针的指针,例如,-2:-。
23-.455"/?..;
&$(");
,&$(23-.455"2:-);
"2:-;23-.455;
@@
(
调用 &$ 之后," 指向新的对象。在 -A2 编程中,你到处都会碰到这样的用法BB例如在查询对象接口的
C):D)& 函数中:
)&D5D)&
0E85?.FC):D)&(DD<,"",A!G);
@@
(;
.H5A28D/F8EI4-8"/?..;
"A!BC):D)&(DD<#5A28D/F8EI4-8");
此处," 是 5A28D/F8EI4-8 类型的指针,所以" 便是指针的指针,在 C):D)& 返回的时候,如果调
用成功,则变量 " 包含一个指向新的接口的指针。
如果你理解指针的指针,那么你肯定就理解指针引用,因为它们完全是一回事。如果你象下面这样声明函数:
,&$(23-.455"2:-);
"2:-;23-.455;
@@
(
其实,它和前面所讲得指针的指针例子是一码事,只是语法有所不同。传递的时候不用传 " 的地址",而是直接
传 " 本身:
23-.455"/?..;
&$(");
在调用之后," 指向一个新的对象。一般来讲,引用的原理或多或少就象一个指针,从语法上看它就是一个普通变
量。所以只要你碰到,就应该想到。也就是说这个函数修改或可能修改调用者的指针,而调用者象普通变量一样
传递这个指针,不使用地址操作符。
至于说什么场合要使用这种方法,我会说,极少。2I- 在其集合类中用到了它BB例如,-A!.,它是一个
-!G 指针列表。
--A!.*"!-!G
@@
获取修改指定位置的元素
-!GJ4(HA5DFDA/");
-!GJ4(HA5DFDA/") ;
(;
这里有两个 J4 函数,功能都是获取给定位置的元素。区别何在呢?
区别在于一个让你修改列表中的对象,另一个则不行。所以如果你写成下面这样: -!G"A!G
:J4(");
则 "A!G 是列表中某个对象的指针,如果接着改变 "A!G 的值: "A!G"5A)A!G;
这并改变不了在位置 " 处的对象地址,而仅仅是改变了变量 "A!G。但是,如果你写成下面这样: -!G
)"A!G:J4(");
现在,)"A!G 是引用一个列表中的对象的指针,所以当改变 )"A!G 时,也会改变列表中位置 " 处的对象地址BB
换句话说,替代了这个对象。这就是为什么 -A!. 会有两个 J4 函数的缘故。一个可以修改指针的值,另一个则
不能。注意我在此说的是指针,不是对象本身。这两个函数都可以修改对象,但只有版本可以替代对象。
在 --中引用是很重要的,同时也是高效的处理手段。所以要想成为 --高手,对引用的概念没有透彻的
理解和熟练的应用是不行的。
三.数据指针
在 --语言中一直是很受宠的;几乎找不到一个不使用指针的 --应用。用于存储数据和程序的地址,这是指
针的基本功能。用于指向整型数,用整数指针 ;指向浮点数用浮点数指针K;指向结构,用对应的结构指
针);指向任意地址,用无类型指针,。
有时候,我们需要一些通用的指针。在 - 语言当中,,可以代表一切;但是在 -中,我们还有一些比较特
殊的指针,无法用,来表示。事实上,在 -中,想找到一个通用的指针,特别是通用的函数指针简直是一个
“不可能任务”。
-是一种静态类型的语言,类型安全在 -中举足轻重。在 - 语言中,你可以用 ,来指向一切;但在 -
中,,并不能指向一切,就算能,也失去了类型安全的意义了。类型安全往往能帮我们找出程序中潜在的一些
6?J。
下面我们来探讨一下,-中如何存储各种类型数据的指针。
-指针探讨 (一)数据指针 沐枫网志
$数据指针
数据指针分为两种:常规数据指针和成员数据指针
$$常规数据指针
这个不用说明了,和 - 语言一样,定义、赋值是很简单明了的。常见的有:!等等。
如:
剩余32页未读,继续阅读
资源评论
憨人_
- 粉丝: 8
- 资源: 33
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功