多级指针
 
以二级指针为例
二级指针的由来是 指针数组 的指针形式.
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. ACM-树重心的性质及动态维护

    本文转自http://fanhq666.blog.163.com/blog/static/81943426201172472943638/ 求树重心的方法:(NlogN) http://www.cnb ...

  2. Redis整理第三波(生存时间、事务管理)

    expire  设置生存时间 Redis在实际使用过程中更多的用作缓存,然而缓存的数据一般都是需要设置生存时间的,即到期后数据销毁. TTL查看key的剩余时间,当返回值为-2时,表示键被删除. 当 ...

  3. Sass基础(一)

    一.Sass语法规范 1.Sass老版本:通过tab键严格控制缩进:不带有任何分号和大括号:以“.sass”为扩展名. 2.Sass新语法格式(Scss):外形和css无差,以“.scss”为扩展名. ...

  4. Java执行Shell脚本

    Linux 系统下采用 Java 执行 Shell 脚本,直接上代码: package com.smbea.demo; import java.io.BufferedReader; import ja ...

  5. Linux pptpd 的 iptables 包过滤设置

    用Centos架设了一台pptpd vpn服务器,信息如下: 服务器IP 192.168.100.1 /24 网关 192.168.100.254(NAT防火墙,将 <外网IP>:1723 ...

  6. 转:Oracle优化总结

    本文主要从大型数据库ORACLE环境四个不同级别的调整分析入手,分析ORACLE的系统结构和工作机理,从九个不同方面较全面地总结了 ORACLE数据库的优化调整方案. 关键词 ORACLE数据库 环境 ...

  7. 解决频繁自动弹出“QQ拼音升级程序”,可使用旧版QQ输入法

    QQ输入法(2017年9月6日版本)下载地址: http://dlc2.pconline.com.cn/filedown_90891_8506339/BZXMP3fp/QQPinyin_Setup_5 ...

  8. graphql 后台服务项目架构(一)

    基础知识 简而言之,GraphQL 是一种描述如何请求数据的语法,通常用于客户端向服务器请求数据.GraphQL 有三个主要特点: 允许客户端精确指定所需数据. 可以更容易地从多个数据源聚合数据. 使 ...

  9. MySQL入门很简单: 8查询数据

    1. 查询语句语法 SELECT 属性列表 FROM 表名和视图列表 [WHERE 条件表达式1] [GROUP BY 属性名1 [HAVING t条件表达式2]] [ORDER BY 属性名2 [A ...

  10. 816 Ambiguous Coordinates (many cases problem)

    https://www.cnblogs.com/Java3y/p/8846955.html -- link of the problem 816 IDEA: check the dot and int ...