嵌入式-C语言基础:二维数组
二维数组的每个元素都是一个一维数组,例如int arr[2][3]={{1,2,3},{4,5,6}};
下面通过几个例子来对二维数组进行深入了解:二维数组可以看作是一个父数组,他的每个元素都是一个一维的子数组。
(1)数组名表示数组首元素的地址,那么arr表示的是谁的地址?arr表示的是ar首元素的地址,也就是arr[0]的地址,同样arr[0],arr[1]也是两个子元素一维数组的数组名,可以分别用数组名a,b来代替,那么arr[0][0]表示a[0],ar[1][0]表示b[0],所以a(arr[0]),b(arr[1])作为数组名f分别也是a[0]和b[0]的地址,也就是arr[0][0]和arr[0][1]的地址:
#include<stdio.h> int main()
{
int arr[2][3]={{1,2,3},{4,5,6}};
printf("arr表示的是arr的首元素地址:%p\n",arr);
printf("*(arr+0)表示的是arr的首元素地址:%p\n",*(arr+0));//arr表示的是arr的首元素arr[0]的地址,那么*(arr+0)表示的就是arr[0],arr[0]表示arr[0][0]的地址
printf("&arr[0][0]表示的是arr[0][0]的首元素地址:%p\n",&arr[0][0]);
printf("&arr[0]表示的是arr的首元素地址:%p\n",&arr[0]);
printf("arr[0]表示的是arr[0]这个子一维数组的首元素地址:%p\n",arr[0]); printf("arr[1]表示的是arr[1]这个子一维数组arr[1]的首元素地址:%p\n",arr[1]);
printf("&arr[1][0]表示的是arr[1]这个子一维数组arr[1]的首元素地址:%p\n",&arr[1][0]);
printf("arr[1]表示的是arr[1]这个子一维数组arr[1]的首元素地址:%p\n",arr[1]);
printf("*(arr+1)+0表示的是arr[1]这个子一维数组arr[1]的首元素地址:%p,偏移1后:%p\n\n",*(arr+1)+0,*(arr+1)+1);//偏移到arr[1]下一个元素的地址 return 0;
}
输出结果
arr表示的是arr的首元素地址:000000000061FE00
*(arr+0)表示的是arr的首元素地址:000000000061FE00
&arr[0][0]表示的是arr[0][0]的首元素地址:000000000061FE00
&arr[0]表示的是arr的首元素地址:000000000061FE00
arr[0]表示的是arr[0]这个子一维数组的首元素地址:000000000061FE00
arr[1]表示的是arr[1]这个子一维数组arr[1]的首元素地址:000000000061FE0C
&arr[1][0]表示的是arr[1]这个子一维数组arr[1]的首元素地址:000000000061FE0C
arr[1]表示的是arr[1]这个子一维数组arr[1]的首元素地址:000000000061FE0C
*(arr+1)+0表示的是arr[1]这个子一维数组arr[1]的首元素地址:000000000061FE0C,偏移1后:000000000061FE10
总结:*(p+i)+j和a[i][j]是等价的,数组名可以当作指针来用,表示地址
二维数组地址写法:
二维数组a的有关指针:
表示形式 含义 地址
a 二维数组名,指向一维数组a[0],即0行首地址 2000
a[0] ,*(a+0),*a 0行0列元素地址 2000
a+1,&a[1] 1行首地址 2016
a[1],*(a+1) 1行0列元素a[1][0]的地址 2016
a[1]+2,*(a+1)+2,&a[1][2] 1行2列元素a[1][2]的地址 2024
*(a[1]+2),*(*(a+1)+2),a[1][2] 1行2列元素a[1][2]的值
嵌入式-C语言基础:二维数组的更多相关文章
- C语言基础--二维数组
二维数组概念: 数组中的每一个元素又是一个数组, 那么这个数组就称之为二维数组,二维数组是特殊的一维数组. 二维数组格式: 元素类型 数组名称[一维数组的个数][每个一维数组的元素个数]; 元素类型 ...
- C语言基础:二维数组 分类: iOS学习 c语言基础 2015-06-10 21:42 16人阅读 评论(0) 收藏
二维数组和一位数组类似. 定义: 数据类型 数组名[行][列]={{ },{ }....}; 定义时,一维(行)的长度可以省略,但是二维(列)的长度不可以省略.但是访问时,一定使用双下标. 二维数组的 ...
- C语言基础二维数组
(1)二位数组的定义int array[n][m],行下标的取值范围是0~n-1,列下标的取值范围是0~m-1,二维数组最大下标元素是array[n-1][m-1]:如定义一个3行4列的数组 int ...
- C语言之二维数组
二维数组 还是一个数组,只不过数组中得每一个元素又是一个数组 1). 声明语法 类型 数组名[行][列]; 例: int nums[2][3];//2行3列的二维数组,保存的数据类型是int类型 c ...
- C语言 字符二维数组(多个字符串)探讨 求解
什么是二维字符数组? 二维字符数组中为什么定义字符串是一行一个? “hello world”在C语言中代表什么? 为什么只能在定义时才能写成char a[10]="jvssj" ...
- C Program基础-二维数组
一维数组可以看作一行连续的数据,只有一个下标.C语言允许构造二维数组甚至多维数组,在实际问题中有时候常常需要用到二维数组(例如数学上的矩阵),二维数组有两个下标,以确定某个元素在数组中的位置. (一) ...
- C语言中将二维数组作为函数参数来传递
c语言中经常需要通过函数传递二维数组,有三种方法可以实现,如下: 方法一, 形参给出第二维的长度. 例如: #include <stdio.h> void func(int n, char ...
- C语言回顾-二维数组
1.二维数组:是一个特殊的一维数组 完全初始化: 1)int a[2][3]={{1,2,3},{2,3,4}}; 2)连续赋值int a[2][3]={1,2,3,2,3,4}; 3)可以省略第一维 ...
- C语言教学--二维数组和指针的理解
对于初学者对二维数组和指针的理解很模糊, 或者感觉很难理解, 其实我们和生活联系起来, 这一切都会变得清晰透彻. 我们用理解一维数组的思想来理解二维数组, 对于一维数组,每个箱子里存放的是具体的苹果, ...
- 【C语言】二维数组做形参
二维数组有两种形式: ①在栈上: int a[4][4] = {...}; ②在堆堆上: int ** a = new int *[4]; for ...
随机推荐
- 第九十九篇:JS闭包
好家伙,总是要来的,去面对那些晦涩难懂的原理,它就在那里,等着我去搞定它 首先我要去补充一些最基本的概念, 1.什么是内存? 新华字典永远的神, 但这个解释显然不够 去看看百度百科: 内存: CP ...
- Springboot连接数据库(解决报错2)
好家伙, 新建项目,不出意外的话总是会出点意外的 第一天正常运行,第二天就炸了. 1.看报错 百度一下找解决方案 试着将 application.properties中的 com.mysql.jdbc ...
- Linux虚拟机 RHEL8.0安装步骤
一. 创建空白虚拟机 1.打开 VMware 虚拟机软件依次选择新建虚拟机并选择选择"自定义" 自定义功能更加全面,典型就是比较简单的配置 2.选择对应的 VMware 版本,此则 ...
- linux 运维有趣的实用工具
1.实时监控磁盘 IO-IOTop IOTop 命令是专门显示硬盘 IO 的命令, 界面风格类似 top 命令. [root@localhost ~]# yum -y install iotop` 2 ...
- Elasticsearch高级检索之使用单个字母数字进行分词N-gram tokenizer(不区分大小写)【实战篇】
一.前言 小编最近在做到一个检索相关的需求,要求按照一个字段的每个字母或者数字进行检索,如果是不设置分词规则的话,英文是按照单词来进行分词的. 小编以7.6.0版本做的功能哈,大家可以根据自己的版本去 ...
- 点赞和取消点赞实现Redis缓存(只思路)
思路:点赞.取消点赞 --> Redis --> (每两个小时)存到数据库(MySQL),所以就相当于每次查询或者存储都需要先经过Redis,而查询的目的是为了判断用户的点赞状态(已点赞o ...
- es根据关键词查看某个指定索引的内容并删除
# 根据关键词查询某个索引的内容 GET product/_search?q=title:测试商品 {"query":{"match_all":{}}} # 根 ...
- 使用Portainer管理其他主机的docker应用有两种方式
官方文档地址:https://docs.portainer.io/v/ce-2.9/admin/environments/add/docker 第一种方式 是在其他主机的docker 启动中放开237 ...
- 第六章:Django 综合篇 - 6:会话session
因为因特网HTTP协议的特性,每一次来自于用户浏览器的请求(request)都是无状态的.独立的.通俗地说,就是无法保存用户状态,后台服务器根本就不知道当前请求和以前及以后请求是否来自同一用户.对于静 ...
- flutter系列之:查询设备信息的利器:MediaQuery
目录 简介 MediaQuery详解 MediaQuery的属性 MediaQuery的构造函数 MediaQuery的使用 总结 简介 移动的开发中,大家可能最头疼的就是不同设备的规格了,现在设备这 ...