二维数组a的数组名a,a[0],a,a[0]的联系,和指针的关系
例: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]的联系,和指针的关系相关推荐
- HDU2642(二维的树状数组)
二维的树状数组,我记得是模版!^ _ ^ 题意很清楚:就是这部分的原理:sum(x1,y1)+sum(x2-1,y2-1)-sum(x1,y2-1)-sum(x2-1,y1);其实可以和概率论中的一个 ...
- 间接通过new 来申请一个二维的堆内存数组
我们知道无法直接通过new 来申请一个二维的堆内存数组,于是有人想出了这样一个办法:创建一个一维堆内存指针数组,即每个数组元素是一个指针,然后用new 给各个指针分配一个一维的堆内存数组,那么最后表示 ...
- 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- ...
- 关于图的二维矩阵转为一维数组的理解。
一开始看二维矩阵转为一维数组的时候还是有点懵的,为啥是N(N+1)/2呢,为啥不是N*N/2呢,这个矩阵明明是N*N的一个正方形啊,我要省一半空间直接除2不就行了,带着这个问题我观察了一下这个PPT里 ...
- 洛谷 - P2163 [SHOI2007]园丁的烦恼(不带修二维数点-树状数组/主席树)
题目链接:点击查看 题目大意:二维平面坐标系中给出 nnn 个坐标点,然后是 mmm 次询问,每次询问需要回答一个闭合矩阵中有多少个点 题目分析:想挂树套树来着,但是复杂度有点大.本题不带修且可以离线 ...
- 二维(字符)数组输入(转载)
对于二维数组的输入,一般是一行一行的输入,当然也可以一个个来,但最好还是一行一行的输入. 所以一行一行的输入: for(int i= 0;i < N;i++) scanf(&qu ...
- 关于返回二维数组排序后序号数组的问题求解
这个题目挺拗口的,还是先来看这个问题的描述吧!详细也可以查看这个帖子< facebook一道面试题,求效率算法 >.因为本文是一边想一边写的,难免啰嗦,闭门造车和错误,请不吝赐教! /* ...
- 知识点笔记(二维数组排序、统计数组重复个数、)
//统计数组内重复元素的个数 let arr = ["leyi", "leyi", "leyi2", "leyi2", ...
- 信息学奥赛一本通1267:【例9.11】01背包问题(二维dp与滚动数组优化)
[题目描述] 一个旅行者有一个最多能装 MM 公斤的背包,现在有 nn 件物品,它们的重量分别是W1,W2,...,WnW1,W2,...,Wn,它们的价值分别为C1,C2,...,CnC1,C2,. ...
- 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 ...
最新文章
- POJ - 2763 Housewife Wind LCA+dfs序+线段树
- Tech.Ed 2006 博客园兄弟聚会
- storyboard搭建项目_Storyboard 快速搭建UICollectionView
- js富文本编辑器_自制富文本编辑器
- Web前端笔记-HTML加载SVG图片及简单修改
- VMware vSAN的相关告警处理 2021-01-04
- 解决windows 下 mysql命令行导入备份文件 查询时乱码的问题
- 如何给新固态硬盘安装系统
- 惠普M1005打印机驱动-LaserJet提供下载
- 10 个错过即损失的智能合约开发者工具
- 如何用计算机录制视频教程,电脑怎么利用软件录制视频教程
- 【LaTex-错误和异常】\verb ended by end of line.原因是因为闭合边界符没有在\verb命令所属行中出现;\verb命令的正确和错误用法、verbatim环境的用法
- 已解决!XXX cannot be resolved to a type!
- android saf小结
- 糟了,上网记录被 Python 扒下来了!
- linux3.5 usb键盘,CRUX 3.5发布下载,一款轻量级且为i686优化的Linux发行版
- Java 8实战(一)- Java 8基础知识
- java 裁剪网格纸_百度裁减网格纸
- 如何策划一场App地推活动方案
- 朴素贝叶斯分类实验(垃圾邮件分类以及垃圾短信过滤数据集)