<- C/C++指针 -> 笔记

      用生活中的事物去描述一下对C/C++指针的理解。希望能为将要学习或也在学习的同学提供一丝灵感。同时欢迎每位读者朋友提出宝贵的意见和建议。

                                                                                                                                                                                                                  祝每一位读者快乐!

一、何为指针。

      所谓指针,是存放数据的内存单元地址。指针就是地址,指针(地址)是一种数据类型。指针也是变量,但只能存放地址类型的数据,可以称为“地址型”变量。那么什么是内存单元地址呢?

      1.内存单元地址

            运行一个程序时,程序本身和程序中用到的数据都要保存在计算机的内部存储器中。而内部存储器是由很多个内存单元(字节)组成,每个单元都有自己独有的、相互不同 的地址。

      2.变量

            程序中可以用变量来存放各种数据,因此每个变量都需要分配连续的字节。当一个变量只占用一个字节时,该字节的地址就是变量的地址。当变量占用连续的若干个字节时,第一个字节的地址(该字节的地址值是所占用的连续字节中地址值最小的)就是该变量的地址。

如图6-1中字符型‘A’的地址就是2000,短整型 5 的地址是2010,单精度实型 70.0 的地址是3000。

      3.数组

            除了变量以外,程序中还可以用数组来存放数据。一个数组的首地址,就是第1个元素(即下标为0的数组元素)的地址。

            如果知道数组a的首地址和数据类型,就可以通过下列公式计算出每个数组元素的地址,从而找到每个数组元素:

                        数组元素a[i]的地址 = 数组首地址 + i * 数组元素的数据类型所占用的字节数




      4.指针变量

            除了上述所介绍的直接存取方式外,还可以采用另一种存取方式,就是先把要存取的变量的地址存入一个”特殊变量“,然后通过这个其值为地址的”特殊变量“来存取变量的值。这种存放地址值的”特殊变量“就是指针变量。


二、指针变量的定义和初始化

      1.指针符号

            

      (1)取地址符号的对象必须是已定义过的变量或数组元素,但不可以是数组名。

      (2)指针符号的对象必须是地址,可以是已赋值的指针变量,也可以是变量或数组元素的地址,但不能是整数,也不能是非地址型的变量。

            ★注意:当指针变量的值为一位数组的首地址时,例如:执行了”

      2.定义

            指针变量在使用前必须先定义,定义的同时可以赋初始值。

            格式: 数据类型   * 指针变量明 [ = 初值] 

      其中的“初值”通常是“& 变量名“、” & 数组元素“或”一维数组名“,这里的变量或数组必须在前面已定义。

      例如:

                  int a;

                  int * p =& a;

      先定义整型变量a,然后定义一个指向整型数据的指针变量p,并赋初值为变量a的地址,即整型的指针变量p指向整型变量a。

                  float  f1,f[10], * p1 =& f1,* p2 = f;

      通过赋初值使指针变量p1、p2分别指向变量f1和一维数组f。



三、个人理解《盐与盐盒的故事》

      1.故事主角

            盐:变量存放的各种数据,也可以成为内存单元。

            袋装盐:地址,告诉我们这就是盐。

            盐盒:我们的指针变量大人。

      2.内容

            福岛核电事故后,大家疯狂的买袋装盐囤积在自家各种袋装的橱柜里。但是做饭时使用袋装盐很不方便,所以就有了厨房必备小盐盒。每次使用时,直接用小盐盒,方便又快捷。那么如何往盐盒里面加盐呢?

            首先,我们通过袋子去拿盐。程序中 “ & ” 就代表袋子。 如: & a;

            其次,是把盐倒入盐盒,但盒子上有盖子,也可以理解为盒子就是标识符,所以我们要打开盖子。程序中 “ * ” 就是代表打开盖子。如:int * p;

            最后,将盐存放进去。如:int * p = & a;则 * p 就代表变量a;

      3.扩展

             那么一维数组就想有一排调料盒,数据类型就是调料。其实也可以比喻成超市的货架。大家可以去感受一下哈,发散一下思维。

当遇到不明白的地方,用生活中的例子去看指针,会比较直观一些。


四、结尾

      1.给大家分享一个牛人解释的博客,直接用程序数据去分析理解指针和指向指针的指针

            http://www.cnblogs.com/dzry/archive/2011/05/12/2044835.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值