1.关于指针理解.docVIP

  • 0
  • 0
  • 约 6页
  • 2017-08-02 发布于河南
  • 举报
HYPERLINK /share/236009694/3477968962 \l nogo#nogo 1.关于指针的理解 来源: HYPERLINK /GetEntry.do?id=494315797owner=228995646 \t _blank 廖宇晨的日志 从普通变量开始 例如?int a = 38; 变量有一个值 38 变量有一个名为 a 变量还有一个在这个程序中看不见的在内存中的地址假设是 0x0022FBD0 变量的类型是 int, 占 4 个字节(32 位) ?? ?这个上面这个图大体表示了一下这个组织形式,其实可以把这个东西直接与现实中的信箱来 对比. 只不过在计算机的世界里面,一个邮箱能且仅能装一封信(^-^). ? (另外,不管是在计算机系统还是在邮局系统中,邮递员都只认信箱号而不知道用户到底是张 三还是李四.) ? 小宇一天收到了一封这样的信: 然后怀着激动的心情去 63 号邮箱去收信 上面这个例子就是一个类似于使用指针的过程, 先看代码: ?? ? ??int a = 38; ??? ? ?int *p = a; ? 在这里,p 里面存的东西其实就是 a 的地址, 我们把这种存着地址的变量叫做指针 注意一下,p 也有自己的地址 0x001EFAA8, 那么现在要是有一个变量, 它里面存 p 的地址呢? ?? ? ? ? ? ? ? ? ? ? ???int **s = p; 我们把这种东西是一种特殊的指针叫做指向指针的指针, 一开始听上去挺唬人的是吧. 其实也就是那么回事 练习一下 好了,来做练习:请写出上文中 p, *p, p, *s, **s, *s 的值,思考之后看解答 ? (1) p: ? ? ? ? ? ?0x0022FBD0 p 这个变量的值是什么呢?存的是 a 的地址 0x0022FBD0 (2) *p: ? ? ? ? ? ? ? ? 38 *p 这个操作是求 p 存的那个地址所存的值也就是 a 的值 38 (3)p: ? ? ? ? ? ?0x001EFAA8 p 就是 p 这个变量是在哪个位置存着的,也就是 p 的地址 0x001EFAA8 (4)*s: ? ? ? ? ? ?0x0022FBD0 这个题目其实是让你复习一下第(2)题中的概念的 *操作符,取的是 s 存的地址所存的值, 也就是 p 的值 0x0022FBD0 (5)**s: ? ? ? ? ? ? ? ? 38 (6)*s: ? ? ? ? ? ? ? ? 0x001EFAA8 *s 就是 p, p 就是 p 的地址 0x001EFAA8 这里也可以看出来和*其实是一对相反的运算,可以相互抵消掉, *s 就是 s (注,1-3 题的答案和 4-6 题的答案是完全一样的) ------------------------------ 一些杂的东西 可能你会对指针在声明时候的初始化感到疑惑 ?? ? ? ? ? int *p = a; ? *p 明明就是取值了么, 为什么还是把 a 的地址赋给它呢? ? 其实是这样的, int*是类型,而 p 是这个类型的一个变量, 所以这个地方其实是一个对 p 的赋值语句 --------------- 那么既然 int*才是类型,那为什么不写成 ?? ? ? ? ? ?int* p = a; 让程序的意思更加明确呢? 其实这个地方的考虑是这样的, 请看: ?? ? ? ? ? ?int* p, p1; 请问p1这个东西是指针还是普通变量? 答案是普通变量, 这个*是带在p上面的, 但是这个*却又是类型声明的一部分. 要让p1也是指针, 就要写成这样 ?? ? ? ? ? ?int* p, *p1; 为了不引起混淆, 所以我一般把这个*号和p粘在一起而不是紧跟在int之后 ?? ? ? ? ? ?int *p, p1; 你看这样多清晰~ ---------------------------- ? 接下来看一段程序 struct lyc{ ?? ? ?int a; }*p, l; int main() { ?? ? ?p = l; ?? ? ?l.a = 10; ?? ? ?printf(%d\n, (*p).a); ?? ? ?printf(%d\n, p - a); ?? ? ?return 0; } 输出的结果很简单: 10 10 写这个就是想说一下p - a其实就是(*p).a, 最初做这样的设定的原因就是书写更方便一下而已了. 所以l - a这样的东西是绝对不行的, l.a才行. ================= 这篇文是去年这时候我给几位需要考研机试的好友写的一系列文中的第一篇。当时只是觉得指针是基础而且一般不是很可以融汇贯通的理解,所以第一篇

文档评论(0)

1亿VIP精品文档

相关文档