玩酷子弟lv 发表于 2013-4-1 19:59:38

一.指针详解之变量

    众所周知,指针是C语言里的重点和难点,如果能够运用的好,它会助你事半功倍,反之,则会给你带来很多的麻烦。初学者在学习指针的时候可能会比较困惑,碰到错误也不知道如果去解决,一时间也找不到易懂的教学资料,头痛万分。针对这个问题,我准备写一个关于指针的教程。尽可能用通俗、透彻的讲解指针,希望能让大家明白指针到底是个什么玩意。由于水平有限,如果大家发现我出现什么错误还请指出哈。闲话少说了,我们进入正题。今天我们要说的是----“变量”。
    不是要说指针吗?怎么扯到变量上面来了呢?呵呵,其实,我发现有不少人之所以不理解指针的原因有很大一部分是因为没有真正的理解变量。因为指针也是一种特殊的变量嘛。
    下面举个简单的例子:
        int a;
        int b;
        a = 2;
        b = a;
    很显然,我在上面定义了两个变量a和b,2是常量。大家注意到了变量a既可以在等号左边(叫做左值),也可以在等号右边(叫做右值)。而常量2若是放在等号左边,大家可以试验下,编译器会报错的。所以,变量既可以做左值,也可以做右值,而常量只可以做右值。
    现在回到代码处,int a;这句代码到底发生了什么?其实编译器会做两件事,先是分配一个4字节(不同的环境可能不同)的内存块,然后给这个内存块命名为“a”。当a = 2时,事实上是把2放到a所代表的这个内存块。当b = a时,a代表的是这块内存里的数值2,然后把2复制到b所代表的内存块。想深入了解的可看下面一段,如果看不懂也没关系,不影响以后的学习。
/**************想深入了解可以看看**************/
其实,CPU是不认识诸如a、b这样的符号,这些是给编译器看的。编译器会生成一个符号表,每当定义一个变量,就会把这个变量名插入到符号表,与这个变量名关联的是内存块的地址。所以可以把变量看做内存块的一个别名。
**************************************

知道这些,理解指针变量就容易了。比如int *p。这句代码干了什么,不就是分配了一块内存,然后取个名字叫做p吗?如果p = &a,那么就把a的地址放到p所代表的这块内存里面。呵呵,就是这么简单的事情。经过上面的分析思路有没有变得清楚一些。
**** Hidden Message *****

aimar213 发表于 2013-4-1 21:06:43

顶顶,来学习了

玩酷子弟lv 发表于 2013-4-1 21:50:03

aimar213 发表于 2013-4-1 21:06 static/image/common/back.gif
顶顶,来学习了

嗯,如果有朋友需要的话,我会继续写指针这个系列的帖子。。。

rfthbftgh 发表于 2013-4-1 21:51:09

{:5_109:}正好不懂

鬼冢大叔 发表于 2013-4-2 04:21:50

很好,学习了,

ylo523 发表于 2013-4-2 07:56:43

很好,支持一个

北极燕鸥 发表于 2013-4-2 08:48:41

顶顶,来学习了

scottly 发表于 2013-4-2 09:54:34

看看。。。。

一片模糊望尘世 发表于 2013-4-2 20:06:00

dingding.......

about;blank 发表于 2013-4-2 23:45:10

a a a a 学习啊。

网络学习 发表于 2013-4-3 00:03:48

经过上面的分析思路变得清楚一些。

飞鸽 发表于 2013-4-3 07:55:35

强烈支持楼主ing……

洛川子 发表于 2013-4-3 08:57:40

强烈支持楼主ing……

lyp199207 发表于 2013-4-3 09:52:49

看到这帖子真是高兴!

伽利略幼稚 发表于 2013-4-3 09:54:31

长姿势啊!!!

伽利略幼稚 发表于 2013-4-3 10:08:31

楼主真有耐心,写的这么好

伽利略幼稚 发表于 2013-4-3 10:11:03

表示看到这样的先富真开心

snowy569094559 发表于 2013-4-3 18:40:20

强烈支持楼主ing……

玩酷子弟lv 发表于 2013-4-3 19:48:13

这个其实应该顶起来啊!准备写第二篇~~

a3181989 发表于 2013-4-30 01:37:47

指针真的是个挺难搞懂的东西
页: [1] 2
查看完整版本: 一.指针详解之变量