多级指针
 
以二级指针为例
二级指针的由来是 指针数组 的指针形式.
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. Spring文件下载

    package com.smbea.demo.controller; import java.io.BufferedInputStream; import java.io.BufferedOutput ...

  2. Eclipse reference

    http://download.csdn.net/download/ling_min/4318719 http://www.qualityeclipse.com/eclipse-gef http:// ...

  3. centreon-engine 性能调优

    http://documentation.centreon.com/docs/centreon-engine/en/latest/user/configuration/best_practice.ht ...

  4. IOS开发入门你们准备好了吗?

    我们对于IOS的了解最多应该就是苹果手机独有的IOS系统吧,也可以说是单任务管理器,这可以说是一个优势,但是随着技术提升IOS慢慢有被超越的趋势,但是很多大公司还是需要这方面的开发人才,那么今天我们来 ...

  5. IOS ScrollView的使用 and delegate

    ScrollView常用的属性设置 //设置内容尺寸 // CGFloat contentH=self.lastBtn.frame // .origin.y+self.lastBtn.frame.si ...

  6. UML总结:UML用于建模描述结构和行为

    UML有3种基本的构造块:组件.关系和图 我们将 UML 中的图分为两大类: 结构图 行为图 (1)结构建模: 结构建模具有捕捉静态的功能,包括下列各项: 类图 对象图 组件图 部署图 结构模型代表的 ...

  7. django2.2连接mysql遇到的坑

    1.mysql数据库配置 2.首先需要建一个myweb数据库 3.执行数据库迁移命令makemigrations python manage.py makemigrations MySite 报错: ...

  8. 【洛谷P1090】合并果子

    合并果子 题目链接 贪心:每次先合并最小的两堆果子 用堆实现 #include<iostream> #include<cstdio> using namespace std; ...

  9. url 解析

    最近在做一个单页应用,使用AngularJS来处理一些页内路由(哈希#后的路由变化).自然会要解析URL中的参数.使用AngularJS自带的方法$location.search();可以自动将参数整 ...

  10. 2.Mysql集群------Mycat读写分离

    前言: Mycat: 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务.ACID.可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群 一 ...