zoukankan      html  css  js  c++  java
  • 指针与数组

    参考资料:


    数组:能用索引访问的同质元素连续集合(内存连续)

    数组和指针的相似处

    我们可以把数组下标用在指针上,即:
    *(p + i) 等价于 p[i]

    指针的加减运算对于数组同样实用,即数组名加减整数:
    *(p + i) 等价于 *(array + i)

    数组和指针的差别

    1.array[i]*(array+i) 结果相同,生成的机器码却不同(存在异议,待修正)

    • array[i]:从 array 位置开始,移动 i 个位置,再取出内容
    • *(array+i):从 array 位置开始,在地址上增加 i ,然后取出这个地址中的内容

    2.sizeof操作符对他们的操作不同
    有代码例如

    int array[5] = {1,2,3,4,5};
    int *p = array;
    

    • sizeof(array):返回20,即数组分配的字节数 4X5
    • sizeof(p):返回4,即指针长度

    数组指针(行指针)

    • 定义:指的是数组名的指针数组首元素地址的指针指向数组的指针。例:int (*p)[4]p 即为指向数组的指针
    • 声明解释:定义一个 指向整数型的一维数组(长度为n) 的指针
    • 本质:指针

    有代码如下:

    int array[3][4];
    int (*p)[4];
    p = array;
    

    pp+1++pp 是一个int型数组(长度4)的指针,p+1 是另一个int型数组(长度为4)的指针,通过一个 p 可以读取 array[] 的内容,++p同理

    p 读取 array[0]:当数据类型匹配时,可以理解为 *p 内的 *p+0,*p+1,*p+2,*p+3 对应读取array[0][1],array[2]...

    p+1读取 array[1]:当数类型匹配时,同理读取 array[1]的内容

    *parray[]数据类型不匹配:即array[3][4](*p)[5],因为*p为5个int的数组,在p读取array[0]时,*p+4 占据了 array[1][0],在p+1读取array[1]时,则从array[1][1]开始读取,产生其他结果,但这并不算错误,而是警告[Warning] assignment from incompatible pointer type [-Wincompatible-pointer-types]。同理,当*p内元素少于数组,则提前读取

    总结(前提为数据类型匹配)

    • p+i 与 *p+i:一个指向第 i 数组首位元素,一个指向 1 数组的第i个元素
    • *p[n] 与 (*p)[n]:优先级() > [] > *,一个是p[n][0]/array[n][0],一个为p[0][n]/array[0][n]

    代码示例:数组指针.c


    指针数组

    • 定义:数组元素全为指针数组称为指针数组。例如int *p[4]
    • 声明解释:p 是指向 int 的指针的数组(元素个数4)。指针数组中的每一个元素均为指针
    • 本质:数组

    有代码如下:

    #define Len 5
    char *p1[Len]    = {"ONE","TWO","THREE","FOUR","FIVE"};
    char var[Len][6] = {"one","two","three","four","five"};
    char *p2[Len];
    
    • 二维数组 var:当定义了一个二维数组后,无论赋不赋值,系统都会给它分配固定的空间,而且该空间一定是连续的。我们可以通过指定下标对其元素进行修改

    • 指针数组 p1:创建指针数组后,分配的空间则取决于具体字符串的长度,但该空间不一定是连续的,且不能通过下标对其元素进行修改

    • 两者空间分配var内个元素大小取决于最长元素(three)为6字节,故总大小 5x6=30,此外,对指针数组 p1 元素进行sizeof()实计算的是 int *,故总大小为 5x4=20

    • 补充:字符串以转义字符 填充,var 内的剩余空间亦是
    • 代码示例:指针数组.c
  • 相关阅读:
    hdu
    如何在maven中的项目使用tomcat插件
    Intellij IDEA 像eclipse那样给maven添加依赖,且Intellij idea里在pom.xml里添加Maven依赖,本地仓库下拉列表显示包很少的血的经验
    DataTables warning: table id=costitemProject
    Navicat Premium Mac 12 破解
    mac显示隐藏的文件
    tomcat7下载地址
    mac同时安装jdk7和jdk8
    屏蔽datatable错误提示
    mac上配置java jdk环境
  • 原文地址:https://www.cnblogs.com/SouthBegonia/p/10896542.html
Copyright © 2011-2022 走看看