zoukankan      html  css  js  c++  java
  • 数组是什么

    数组在c的表现是一些连续地址的指针

    int a[3]

    这个a 是数组类型,但a也是个指针,是a[0]的指针,根据“一些连续地址的指针"规则

    a[1] 自然是 a+1:指针地址的值+1

    这就是数组,至于多维数组,他的指针仍然是连续的,只是可以[0][1]这样取而体现了不同。

    那么这个a到底是什么呢 还是把他理解为指针变量 最清晰,这样在动态申请数组内存的时候对于变量就更好理解

    数组a[0]的指针就是数组a的指针就是数组a。

    malloc(sizeof(int*)*4)   申请4个int大的的内存(连续的)

    (int*)malloc(sizeof(int*)*4) 转换为int指针 a[0]是* 指向int

    int **a = (int**)malloc(sizeof(int*)*4) a[0]是*,指向*,*指向int

    那么理解 “连续地址的指针”  再去理解链表与数组到底哪个快就更好理解了

    如果顺序读取(按顺序读) 其实是没有区别的

    链表是通过指针找到下一个指针,数组是能过指针0+n指到下一个

    但不按顺序读取时,

    链表一个一个读的逻辑,再与数组的指针+n计算指针地址逻辑比,明显数组的读取就快了。

    同样,由于逻辑不同,链表也有删除的优点。

    看起来 "按地址计算其他位置" 与 “指针指向下个位置” 是完全不同的逻辑,而且是完全无法相融合的逻辑。

    甚至于细想想,这好像完全不是能一起比较的两种方案。一个硬件派,一个逻辑派。

    指针数组与数组指针

    int *p1[10]; 包含指针的数组

    int (*p2)[10];  指向数组的指针

    “[]”的优先级比“*”要高。

    p1 先与“[]”结合,构成一个数组的定义,数组名为p1,int *修饰的是数组的内容,即数组的每个元素。

    那现在我们清楚,这是一个数组,其包含10 个指向int 类型数据的指针,即指针数组。

    至于p2 就更好理解了,在这里“()”的优先级比“[]”高,“*”号和p2 构成一个指针的定义,指针变量名为p2,int 修饰的是数组的内容,即数组的每个元素。数组在这里并没有名字,是个匿名数组。那现在我们清楚p2 是一个指针,它指向一个包含10 个int 类型数据的数组,即数组指针。

    一个小技巧

    (*p)[10] 

    *p+1 == (*p)[1]

  • 相关阅读:
    gerrit 修改前一次提交的方法(转载)
    数据结构实验之图论六:村村通公路 【克鲁斯卡尔算法】
    数据结构实验之图论五:从起始点到目标点的最短步数(BFS)
    数据结构实验之图论四:迷宫探索【dfs 求路径】
    Java 【打印俄文的英文字母】
    【留给自己的独白,长大了】
    Java 【 ArrayList应用 】 (SDUT 4069 C~K的班级)
    你的勇气去哪里了
    Java的 「 “ 结构体 ”」 与 「 “ 自定义排序 ” 」
    Java 中的 SimpleDateFormat 【 parse 和 format 】【转换时间格式】
  • 原文地址:https://www.cnblogs.com/mattins/p/3337547.html
Copyright © 2011-2022 走看看