c&c++中的指针

    曾经自己认为最熟悉的计算机语言是c语言,曾经那段刚入大学的第一个学期就学c语言的过程让我这个学计算机的人很难忘却。当时对计算机的了解仅限于聊QQ和上网的我们----20出头的年轻人们,学这个当时是认为最难的一门课程的时候,那中滋味也是很难忘却的!
    我估计教我们c语言的杜老师应该是最无奈的,那个才华横溢的堂堂山东大学毕业的研究生,教我们这些几乎对语言一窍不通的人们,那种痛苦可想而知!仍然还记得老师给我们讲c语言的时候的表情,老师一些经典的话语。非常感谢老师对我们的耐心,对我们不抛弃不放弃!
    很清晰的记得老师说的关于计算机的学习的一个比喻“学计算机的过程就是啃一个饼的过程,我们刚开始的时候,东咬一口,西咬一口。虽然我们对一些东西一知半解,当我们的功力达到的时候,忽然有一天,你把这个饼咬的所剩无几的时候,好多一些不明的东西就会豁然开朗,就如进入桃花源一样。那时候的你就是专家了!”

                                                                              ---------------仅此纪念我那美好的在济南的大学时光
      下面转入正题:
       就是指针变量与其它的变量的同与不同:它们都是一个变量,都用来存储一个值;但,指针存放的是另外一个变量的地址
       可以这样打个比方:
      有一间房子,它的地址是:人民路108号。这个房子相当于一个变量。那么:
      1、如果它是普通变量,则房子里可能今天住的是张三,明天住的是李四。张三,李四就是这个变量的值。通过访问这间房子,我们可以直接找到张三或李四。 
     2、如果它是一个指针变量,则房子里不住具体的人,而是放一张纸条,上面写:“南京路20号”。
     “南京路20号”是一个什么东西?是一个地址。
     通过该地址,我们继续找,结果在“南京路20号”里找到张三。
     变量的存储的值可以改变,指针变量的值同样可以变更:
     过一天,我们再去访问这个房子,纸条变了“珠海路309号”,通过它,我们找到的是另一个人。

看图:

c&c++中的指针_第1张图片
          其中20000007这地址就是指针变量存储的地址,这个地址是500的地址!基于以上我们应该对指针的概念有了较为深刻的理解了!

      下面说一下指针的大小:
       指针的大小是问:一个指针变量占用多少内存空间?

      分析:既然指针只是要存储另一个变量的地址,。注意,是存放一变量的地址,而不是存放一个变量本身,所以,不管指针指向什么类型的变量,它的大小总是固定的:只要能放得下一个地址就行!(这是一间只有烟盒大小的“房间”,因为它只需要入一张与着地址的纸条)。
存放一个地址需要几个字节?答案是和一个 int 类型的大小相同:4字节。(这里说的仅限于32位的计算机)
所以,若有:

int* pInt;
char* pChar;
bool* pBool;
float* pFloat;
double* pDouble;

则: sizeof(pInt)、sizeof(pChar)、sizeof(pBool)、sizeof(pFloat)、sizeof(pDouble)的值全部为:4。

是不是和你以前想的不一样,仔细领悟一下吧!

     其他的一些比较好理解的东西,估计在学c语言的时候应该都已经解决,这里写一下我认为容易混淆的一些东西:
   
     我们看一下下面的例子:
     (1)        int k = 100;
     (2)        int* p;
     (3)        p = &k;   //p取得变量k的地址
     第1行定义一个整型变量k。
     第2行定义了一个整型指针p。
     第3行,“指针 p 存储了变量k的地址”。短的说法是“p指向了k”。
     执行了上面三行代码后,结果是: p 指向 k。我们来看具体的内存示意图

      
    以上的图例就说明上面的三行代码的意思。
    下面的就是比较容易混淆的了:
    (1)int k = 100;
    (2)int* p = &k;
    (3)int m = *p;
     这三句代码和上面有什么区别呢?
     第一句是一样的。
     第二句是不是相当于上面的第二、三句呢?答案是肯定的。
     第三句是关键,理解了这句话,就相当于领悟了指针的精髓。
      一定要注意区别int* p中的p和*p的区别,前一个是定义指针变量,我们上边已经说了它是指向一个变量的地址,如上边的第二句就是指向了变量k所在的地址。而后面的*p则是指针,指向地址中的值,就是k的值。
      上面一段说的是不是有点迷糊了,那就再详细说明一下吧:
      * 在C,C++语言里除了起“乘号”的作用以外,前面我们还刚学了它可以在定义变量时,表明某个变量是属于“指针类型”。现在,则要讲到它还能起“地址解析”的作用。
什么叫“地址解析”?假设有一 int 类型变量k:
       int k = 100;

        内存     内存地址
          100   11000000

         100 是该内存中存放的值。而 11000000 则是该内存的地址。
         “地址解析”就是 地址->值 的解释过程。即:通过地址 11000000 得到位于地址的变量。
可见“地址解析(*)” 和 “取址(&)” 正好是一对相反的操作。
      

      就写这些吧,估计应该能够明白了,也以此作为结束吧!:-)

      摘自自己的新浪博客

你可能感兴趣的:(C++,c,qq,存储,语言)