多级指针
 
以二级指针为例
二级指针的由来是 指针数组 的指针形式.
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. es6-正则

    RegExp构造函数 在ES5中,RegExp构造函数的参数有两种情况. 第一种情况是,参数是字符串,这时第二个参数表示正则表达式的修饰符(flag). var regex = new RegExp( ...

  2. 使用js来执行全屏

    当用户按下F11事件,浏览器为触发自身全屏功能,这个过程我们一般是不可控制的,即使是监听了F11的键盘事件,退出全屏的时候,我们也捕捉不到退出全屏触发的事件.所以,我们就用程序自己去实现F11的功能, ...

  3. (十)JavaScript之【DOM定义】

    DOM定义Document Object Model 文档对象模型 是干什么的?改变 HTML 元素的内容 (innerHTML)改变 HTML 元素的样式 (CSS)改变 HTML 元素的属性对 H ...

  4. 转:解决Arcsde用户锁定的问题

    采用arcgis平台做GIS应用的人,可能偶尔碰到sde用户锁定(Arccatalog 或应用程序异常退出的时比较多)的问题,往往咱们解决的办法是重启sde服务.如果一个服务器上有多个连接时,重启服务 ...

  5. iptable防范ddos攻击

    Basic DoS Protection https://github.com/MPOS/php-mpos/wiki/Basic-DoS-Protection # Rule 1: Limit New ...

  6. Linux学习_按时间顺序解压多个文件,搜索文件中的内容

    ls的结果按时间数据先排序,再取末尾5个文件,再调用tar命令 ls -1 | sort -u | tail -5 |xargs -n1 tar xzvf 利用grep命令从文件中搜索. grep - ...

  7. 基于FPGA的VGA显示设计(二)

    上一篇:基于FPGA的VGA显示设计(一)     参照 CrazyBingo 的 基于FPGA的VGA可移植模块终极设计代码  的工程代码风格,模块化处理了上一篇的代码,并增加了一点其它图形. 顶层 ...

  8. 通过CSS3实现:鼠标悬停图片360度旋转效果

    效果很好玩,代码很简单: 效果: 鼠标放置在图片上:360度顺时针旋转 鼠标离开图片:图片260度逆时针旋转 只要将下面代码拷贝过去,并将图片改成你想要的就可以看到效果 <!doctype ht ...

  9. c++中explicit关键字用法

    C++ explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,既然有"显式"那么必然就有"隐式",那么什么是显示而什么又是隐式的呢? 如果c++类 ...

  10. 曲率(Curvature)

    原文链接 几何体的曲率对于不同的对象有不同的定义.首先来看最简单的平面曲线. 首先把曲线分成无穷小的小段,每一段看作某个圆的一小段圆弧.这个圆叫做“密切圆”(Osculating Circle).由于 ...