例:int a[2][3]={{1,2,3},{4,5,6}};

1.二维数组的模样:

类似于一维数组,数组名代表首元素地址,对于二维数组,a[0][0],a[0][1],a[0][2]为第一行元素,a[0]类似于以为数组名,所以a[0]为第一行首元素的地址,a[1]为第二行首元素的地址。   a[0]=&a[0][0],a[1]=&a[1][1];而地址就是指针,所以我们像访问某一个元素时,如:a[0][1],用*(a[0]+1)即可访问。也可以定义一个指针变量保存a[0]的地址,然后*((p+i)<=>a[0][i];

2.二维数组存储模型:

数组时二维的,但是内存是一维的,所以二维数组和一维数组存储是一样的。

所以,如果你想访问a[1][0],也可以使用a[0][4],一般不推荐后者,它容易让人产生(越界)误解。

3.二维数组和指针的联动

我们发现他们的地址都一样,他们有何区别?

a[0]<=>&a[0][0],w为数组首元素地址;&a[0]<=>a是第一行元素的起始地址,它指向第一行整个数组。所以a,&a[0]是一个数组指针。对于*a是对数组指针的解引用,代表数组首元素地址,即*a<=>&a[0][0];而&a是一个二维数组指针,它是整个二维数组的起始地址,指向这个二维数组整体。如图所示

所用测试代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main()
{int a[][3] = { {1,2,3},{4,5,6} };int* qp = a[0]; int(*p)[3] =  a ;                //数组指针int(*q)[2][3] = &a;              //数组指针printf("%d\n", *(qp+1));         //相当于a[0][1]printf("%d\n", *(*(p+1)+1) );    //相当于a[1][1]printf("%d\n", *(*(a + 1) + 1)); //相当于a[1][1]printf("%p\n", a[0]);printf("%p\n", &a[0]);printf("%p\n", a);printf("%p\n", &a);printf("%p\n",*a);printf("%p\n", *a[0]);printf("%p\n", &a[0][0]);system("pause");}

二维数组a的数组名a,a[0],a,a[0]的联系,和指针的关系相关推荐

  1. HDU2642(二维的树状数组)

    二维的树状数组,我记得是模版!^ _ ^ 题意很清楚:就是这部分的原理:sum(x1,y1)+sum(x2-1,y2-1)-sum(x1,y2-1)-sum(x2-1,y1);其实可以和概率论中的一个 ...

  2. 间接通过new 来申请一个二维的堆内存数组

    我们知道无法直接通过new 来申请一个二维的堆内存数组,于是有人想出了这样一个办法:创建一个一维堆内存指针数组,即每个数组元素是一个指针,然后用new 给各个指针分配一个一维的堆内存数组,那么最后表示 ...

  3. matlab 三维数组运算,MATLAB二维三维画图仿真数组运算

    MATLAB二维三维画图仿真数组运算 1. 数学 (1) 数组运算: x=[1 2 3 4]; y=[3 4 5 6]; z=x+y %数组x与数组y相加得到数组z z = 4 6 8 10 z=x- ...

  4. 关于图的二维矩阵转为一维数组的理解。

    一开始看二维矩阵转为一维数组的时候还是有点懵的,为啥是N(N+1)/2呢,为啥不是N*N/2呢,这个矩阵明明是N*N的一个正方形啊,我要省一半空间直接除2不就行了,带着这个问题我观察了一下这个PPT里 ...

  5. 洛谷 - P2163 [SHOI2007]园丁的烦恼(不带修二维数点-树状数组/主席树)

    题目链接:点击查看 题目大意:二维平面坐标系中给出 nnn 个坐标点,然后是 mmm 次询问,每次询问需要回答一个闭合矩阵中有多少个点 题目分析:想挂树套树来着,但是复杂度有点大.本题不带修且可以离线 ...

  6. 二维(字符)数组输入(转载)

    对于二维数组的输入,一般是一行一行的输入,当然也可以一个个来,但最好还是一行一行的输入. 所以一行一行的输入: for(int i= 0;i < N;i++)         scanf(&qu ...

  7. 关于返回二维数组排序后序号数组的问题求解

    这个题目挺拗口的,还是先来看这个问题的描述吧!详细也可以查看这个帖子< facebook一道面试题,求效率算法 >.因为本文是一边想一边写的,难免啰嗦,闭门造车和错误,请不吝赐教! /* ...

  8. 知识点笔记(二维数组排序、统计数组重复个数、)

    //统计数组内重复元素的个数 let arr = ["leyi", "leyi", "leyi2", "leyi2", ...

  9. 信息学奥赛一本通1267:【例9.11】01背包问题(二维dp与滚动数组优化)

    [题目描述] 一个旅行者有一个最多能装 MM 公斤的背包,现在有 nn 件物品,它们的重量分别是W1,W2,...,WnW1,W2,...,Wn,它们的价值分别为C1,C2,...,CnC1,C2,. ...

  10. matlab 三维数组 二维,Matlab相关——三维数组变二维

    代码 m=255*335;n=33; A=zeros(m,n); // 创建一个空的二维数组 for x=1:1:255 // x从1遍历到255,步长为1(是叫做步长吧) for y=1:1:335 ...

最新文章

  1. POJ - 2763 Housewife Wind LCA+dfs序+线段树
  2. Tech.Ed 2006 博客园兄弟聚会
  3. storyboard搭建项目_Storyboard 快速搭建UICollectionView
  4. js富文本编辑器_自制富文本编辑器
  5. Web前端笔记-HTML加载SVG图片及简单修改
  6. VMware vSAN的相关告警处理 2021-01-04
  7. 解决windows 下 mysql命令行导入备份文件 查询时乱码的问题
  8. 如何给新固态硬盘安装系统
  9. 惠普M1005打印机驱动-LaserJet提供下载
  10. 10 个错过即损失的智能合约开发者工具
  11. 如何用计算机录制视频教程,电脑怎么利用软件录制视频教程
  12. 【LaTex-错误和异常】\verb ended by end of line.原因是因为闭合边界符没有在\verb命令所属行中出现;\verb命令的正确和错误用法、verbatim环境的用法
  13. 已解决!XXX cannot be resolved to a type!
  14. android saf小结
  15. 糟了,上网记录被 Python 扒下来了!
  16. linux3.5 usb键盘,CRUX 3.5发布下载,一款轻量级且为i686优化的Linux发行版
  17. Java 8实战(一)- Java 8基础知识
  18. java 裁剪网格纸_百度裁减网格纸
  19. 如何策划一场App地推活动方案
  20. 朴素贝叶斯分类实验(垃圾邮件分类以及垃圾短信过滤数据集)

热门文章

  1. UML--部署图详解
  2. 区块链运营之误解与成长
  3. 如何彻底的删除hao123_彻底删除hao123导航主页以及桌面快捷方式
  4. Atitit uke公司简介与基本制度建设草案v11 r66 .docx
  5. 用cocos2dx做一个简单的单机捕鱼达人游戏(3)
  6. 1760:菲波那契数列(2)
  7. Mac系统下Datagrip打不开、点击没反应?
  8. 【owt-server】wrtcConnection 使用 wrapper
  9. Windows下运行PCR-GLOBWB的学习和总结
  10. 今日头条成功的核心技术秘诀是什么?深度解密个性化资讯推荐技术