• 我也要学C语言第十七章:指针数组


    指针数组的定义

      如果数组的元素都是指针类型,那么我们就把这种叫做指针数组。指针数组是如下定义的:

      类型名字  *数组名[常量表达式]

      我们以前学习的时候知道如果数组的元素如何是char型,那么这个就是char型数组,如何数组元素都是int型,那么这个就叫int型数组,在这里呢,如果数组元素都是指针,那么这个就是指针数组。

      大家发现没有,指针数组也没有什么特别的,只是它的元素都是指针。那么我们在使用它的时候就和其他整型数组没有太大的区别。

    例子:  int *x[10]

      通过前面的解释,那么我很容易回到道这个是表示,x是一个数组,里面有10个元素,每个元素是一个指针指向整型。嘿嘿!是不是很简单啊!原来就是把指针放数组里啦!就好比以前“串串香竹签”上的土豆编程了指针了。指针是一种抽象,在计算机中用来表示地址加其解释方式。

      那么我们现在思考一个问题啊,这个int *x[10]求长度会是多少呢,嘿嘿!聪明的你1下子就想到了,指针嘛!在32位系统中是4字节的,那么这里有10个,那就是40字节啦!

    指针数组的主要应用

      指针数组从它的定义我们便知道它是主要用来管理同种类型的指针,其实最常见的就是用来管理字符串。

      现在呢,我们还是老办法,先看指针数组的内存形式,这样我们再应用就会思路更清晰啦!

    大家是不是觉得指针数组很好玩啊!aString数组里面放的3个4字节指针啦!。大家一定要注意啊,上面的和 char aString[]="............" 这样的形式是不一样的啊,这种形式是把字符串放在数组里的哦!指针数组中数组里放的只是指针哦!是指向字符串的指针,也就是字符串的首地址。那么我们现在去看看真正的字符串在哪里啊,嘿嘿,大家一看地址就知道啦,第一个字符串的地址是00422080啊,然后依次挨着放的。好,我们去那个地址看看,到底是不是这样啦!

    呵呵!大家看到了吧!数组里面全部是记录的指针吧!

    一个很必要的对比

      下面大家来看1个例子,我们来仔细分析下:

    #include <stdio.h>

    void main()
    {
    char*aStringA[]=
    {
    "I'm not afraid to take a stand",
    "We'll walk this road together, through the storm",
    "Whatever weather, cold or warm"
    };

    char aStringB[][60]=
    {
    "I'm not afraid to take a stand",
    "We'll walk this road together, through the storm",
    "Whatever weather, cold or warm"
    };

    }

    对于这个例子呢!如何输出的话。2个结果都一样的!但是它们有什么区别呢?!大家好好回忆下我之前的笔记,然后我们做以下区别的总结:

    1,第一个数组字符串在常量区,第二个数组字符串在栈区。

    2,第一个数组的长度是12字节,第二个数组长度是180字节。

    3,第一个数组就像高级语言的变长数组,第二个数组就相当于定长数组拥有很快的寻址能力

    4,第一个数组做元素交换很方便,只需要交换指针。第二个数组做交换就得把整个元素都抄下来然后交换

     

  • 相关阅读:
    中断向量表
    lua绑定C++对象—luna模板
    lua对象调用—用 "." 与 ":" 调用表中函数时的区别
    FreeSWITCH 实现 双线路呼叫(主备线路)
    [转]Freeswitch在阿里云服务器语音不通问题小记(FS的NAT穿越穿透)
    [转]签发使用自签发证书--指定使用多域名、泛域名及直接使用IP地址
    [转]FreeSwitch启用WEBRTC小记
    [转]FreeSwitch1.10版本安装及内置mariadb(mysql)使用记录
    FreeSWITCH 使用 lua 脚本 接管 分机注册,鉴权等
    sip客户端NAT注册和拨打FreeSWITCH ,FreeSWITCH 会发到 sip客户端内网地址的问题
  • 原文地址:https://www.cnblogs.com/dodolook/p/2089252.html
Copyright © 2020-2023  润新知