多级指针
 
以二级指针为例
二级指针的由来是 指针数组 的指针形式.
int *p[10]
读取的顺序是
p[]       --> 10个空间的数组
* p[] --> 这10个空间的数组里面存放的数据都是 指针型的数据
int *p[] --> 数组里面每个指针指向的空间存放的是int型的数据 int *p[] --> int **p;
p: 指针数组的数组名,也是数组的首地址.
*p 数组里面存放的指针
**p 数组里面存放的指针 指向的空间 的内容
二维数组指针:
    二维数组:

int buf[][] = {{,,},{,,},{,,},{,,},{,,}};

0X00:
0X18:
0X30:
0X48:
0X60:
这是一个 5行 6列 的数组.
在读取的时候,每次读1行,每行有6个元素, 每个元素有int大小.
    
二位数组的每一行都有一个 行首地址 , 第一行的首地址也是二维数组的首地址.
所以将二维数组看成是许多一维数组的组成,就好理解了.
 
类比于普通的一维数组:
int a       [];    //a代表的是数组首地址,也是行首地址,从这个地址开始,有10个int大小的数据空间.
int (*buf) []; //(*buf) == a 表示的是行首地址, 从这个地址开始有 6个 int 大小的数据空间

int (*buf)[6];

    读取的顺序是:
    *buf 定义一个指针变量,这个变量里面是指针,也就是地址,作为二维数组行首地址        //就好像是一维数组的数组名a
    int (*buf)[6];  以行地址为首,开辟6个int空间.
  

int (*buf)[]
*(buf+i) //表示 buf[i][0] 的行首地址,
*(buf+i)+j //表示 buf[i][j] 的元素地址,
*(*(buf+i)+j) //表示 buf[i][j] 的内容
三维数组指针:
int buf[][][];  //三位数组
int (*buf)[][] //三维数组指针

所以:
二级指针:   int *p[n];

二维数组:  int (*p)[n];

            

C语言数组篇(五)多级指针和二维数组指针的区别的更多相关文章

  1. 论C语言中二级指针和二维数组之间的区别

    刚开始学习C语言的时候,觉得一个数组可以定义一个一级指针去访问,想当然的就觉得可以定义一个二级指针去访问二维数组.很显然这是错误的. 我们来看看C语言的数组在内存中的存储方式. 实际上C语言中的数组, ...

  2. C语言基础练习——最大值及其位置(二维数组)

    C语言基础练习——最大值及其位置(二维数组) 时间限制: 1 Sec  内存限制: 10 MB 题目描述 有一个n×m的矩阵,要求编程序求出: 每行元素的最大值,以及其所在的行号和列号.求出所有元素的 ...

  3. C:指针遍历二维数组

    C 指针遍历二维数组 http://blog.csdn.net/lcxandsfy/article/details/55000033 C++ 字符串指针与字符串数组 https://www.cnblo ...

  4. 20130330 printf数组改变 数组指针便利二维数组 二级指针遍历二维数组 ZigZag

    1.为什么printf之后数组的值会改变? #include<stdio.h> ; int * Zigzag() { ,j=,limit=; ; ; int a[N][N]; int (* ...

  5. c语言,指针与数组--指针与二维数组2

    指向一维数组的指针   char (*p)[10] ;指向一维数组的指针类型 typedef  char(*TYPE_P2ARRAY)[10]  ;   该指针可以指向数组 ,且使用起来效果节本相同, ...

  6. 唠唠C++二级指针、二维数组、指针数组、数组指针等的区分

    今天看c++primer第六章,有这部分的内容,脑子有点糊涂了,看了几篇博客,自己敲了下,记录一下备忘. 二级指针: int **p; 二维数组: int p[10][10]; char q[10][ ...

  7. C指针与二维数组

    先贴上完整的代码: #include<stdio.h> int main(int argc, char *argv[]){ int a[3] [5]={1,2,3,4,5,6,7,8,9, ...

  8. C++ 指针与二维数组名

    和一维数组类似,C++ 将二维数组名解释为其第一个元素的地址,而二维数组的第一个元素为一维数组,以下面的程序为例,二维数组名 array2d 和 &array2d[0] 等效,它们的类型都为 ...

  9. leetcode 刷题(数组篇)74 题 搜索二维矩阵 (二分查找)

    二分查找要注意边界值的取值,边界情况的判定 题目描述 编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. 每行的第一个整数大于前一 ...

随机推荐

  1. MacOS python自动补全设置

    1. 新建python自动补全脚步 $ cd <workdir> $ touch tab.py $ vim tab.py,输入如下内容后保存 $ chmod +x tab.py #!/us ...

  2. ping过程详解

    原出处:http://wanicy.blog.51cto.com/509018/335207/ PS:这里只是给出了ping ip地址的例子,没有给出ping域名的例子. ping 域名还有域名转换成 ...

  3. jsp---》》》新闻发布系统的项目跟踪+++++++文件上传

    先来一个分层架构图: WeebRoot目录下的页面: 现在,此项目以实现登录,注销,新闻列表,编辑主题>>>> 先来登录部分的关键代码 index.jsp中的代码 userIn ...

  4. Spring课程 Spring入门篇 2-2 Spring注入方式

    课程链接: 本节主要讲了以下两块内容: 1 xml两种注入方式 2 注入方式代码实现 3 特别注意 1 xml两种注入方式 构造注入和set注入 2 注入方式代码实现 2.1 set注入方式的实现 实 ...

  5. 动态计算UITableViewCell高度详解 (转)

    感觉挺有用的一篇文章,分析了4种解决方案.回头测试之.如果有别的方案,我会在后面补上. 原文地址:http://www.ifun.cc/blog/2014/02/21/dong-tai-ji-suan ...

  6. Java中的各种锁

    .共享锁和排它锁的区别

  7. Python列表类型及常用操作

    Python列表类型 1.用途: 存放多个值,可以根据索引存取值 2.定义方式: 在[ ]内用逗号分割开多个任意类型的值 l=['yven','law','lyf'] #l=list(['yven', ...

  8. C语言问题集

    征服C指针:P70#include "stdio.h" char *int_to_str(int int_value){ static char buf[20]; sprintf( ...

  9. Mahara-16.10 (Ubuntu 16.04)

    平台: Ubuntu 类型: 虚拟机镜像 软件包: mahara-16.10 commercial education elearning mahara open source 服务优惠价: 按服务商 ...

  10. 数组k平移三种方法(java)

    上代码,本文用了三种方法实现,时间复杂度不一样,空间复杂度都是o(1): public class ArrayKMove { /** * 问题:数组的向左k平移,k小于数组长度 * @param ar ...