zoukankan      html  css  js  c++  java
  • 第10章 指针(三)对地址进行分类指针类型

    我们已经知道,指针就是首地址。
           在日常生活中,我们认识了一个人A,而后我们用他的电话联系他,当然关系好些,可以留下其地址,以便登门拜访。于是我们用一个本子,记录下电话和地址,这个记录电话地址的本子,就是我们常说的电话本儿,现在我们的手机里面就有电话本,功能强些的电话簿,还有记录地址的功能。通过地址我们就可以找到他们。因此,记录地址是我们日常必需的一个工作。
           在计算机中,   我们定义了一个变量A,而后我们用变量名A访问它,当然深入编程,也可留下A的首地址,以便登门拜访。于是我们需要记录下A的首地址;C语言中,我们可以使用一个变量B来记录A的首地址的,这里的B是一种特殊的变量,是专门用来存放地址的变量;有关这种地址变量的定义,我们会在后面描述。通过B中的地址,我们就可以找到A了。因此,存储首地址是我们C编程必需的一个工作。
          
           好,现在,我们首先,对地址簿中,可能的地址,进行分类,
           日常生活中,我们的地址簿是一个本子,其中人的地址是按照朋友、同学、同事、亲戚、好友等等分类的,而且可以用不同颜色的笔来区别!比如红笔写的地址,代表朋友。黑笔,代表同学。黄笔,代表同事。绿笔,代表亲戚。蓝笔,代表好友。

           电脑编程中,我们的地址簿中存放的是一些变量或函数的首地址。我们不能用颜色来分类地址,而是按照整型、浮点、字符、数组、函数等等对地址进行分类,分成整型地址、浮点地址、字符地址、数组地址、函数地址等等,也就是说地址是有类型的,这些类型是繁杂的,需要认真加以区别和记忆!
           1、普通变量首地址的类型:
               我们已经很熟悉,用int定义的变量,能存放-32768~+32767这个范围内整数,这种变量的首地址是有类型的,类型是int *,这里*的意思就是地址类型。
               例如:有int a;那么int a的首地址我们简写成&a,于是&a的类型就是int *

               如果说,int变量和int变量的首地址之间有类型的对应关系的话,
               那么,变量是int类型,相应的,该变量首地址是int *类型,简写为:       
                                          int    ---->>>>   int *
    同理:float---->>>>float *
        char---->>>>char *
          unsigned---->>>>unsigned *
          long---->>>>long *
              .....................

          
    2、一维数组首地址的类型:
               int---->>>>int *     float---->>>>float *     char---->>>>char *;
               例如:int a[10]; 其首地址就是数组名a , 于是a就是int *类型的。
               而此数组中,任意一个元素的首地址的类型,
    也是int *类型的
      
    比如a[5]的首地址是&a[5],也是int *类型的
              
          
    3、二维数组首地址的类型:
               假设有2维数组定义如下:
                  int a[3][4];
               那么把int a[3][4],用小括号把数组名括起来变成int (a)[3][4],再把数组名变成*,即int(*)[3][4],接着把表示行数的部分[3]去掉,变成int (*)[4],就是这个2维数组地址的类型。

                                  int a[3][4];          ------>>>>       int (*)[4]
               一般的,二维int 数组名[数组行数][n]----->>>>int (*)[n],而此二维数组每行必须有n列。

               于是同理:
                           二维float 数组名[数组行数][n]----->>>>float (*)[n]
                           二维char 数组名[数组行数][n]---->>>>char (*)[n]


          
    4、函数首地址的类型:
               对于函数,假设,有函数int F(void){...},那么,用int (*)(void)作为它的首地址(又称入口地址)的类型。
               这个类型是如何来的呢?就是把其函数首部 int F(void),用小括号把函数名括起来变成int (F)(void),再把函数名变成*,即int(*)(void),就是该函数入口地址的类型。
                              int F(void){...}---->>>>int (*)(void)




           从上面可以看到,地址类型中,都用到一个*
           我们已经知道,首地址就是指针,因此上述地址类型,就是指针类型。
           学习指针的第一关就是能熟悉上面这些繁杂的地址类型的写法,这,是必须穿越的第一关哦

  • 相关阅读:
    最通俗易懂的技术解读
    laya学习查漏补缺
    vue+webpack实现懒加载的三种方式
    web安全防范策略
    http/1.x、http/2与https的区别、以及http3
    设备检测
    移动端调试利器------微信开源项目
    SqlConnection 在linux 连接 mssql 挂起的问题。
    rabbitmq 启用日志跟踪
    使用脚本把.net core 程序部署到 docker 容器中
  • 原文地址:https://www.cnblogs.com/huyong/p/2685662.html
Copyright © 2011-2022 走看看