当前位置:网站首页>二维数组零碎知识梳理
二维数组零碎知识梳理
2022-08-02 09:09:00 【敲键盘的喵】
目录
前言
哈喽,小伙伴们大家好。在c语言中二维数组的结构比较复杂,尤其是和指针结合到一起后。由于最近一直在学c++,对二维数组的部分知识感觉生疏了,所以写一篇博客对这些知识进行总结。
一、二维数组的结构
我们可以把二维数组理解成是先有一个一维数组,然后一维数组的元素类型同样是一维数组,也就是数组里嵌套数组。

把每一行理解成一个独立的数组,arr[i]选择第i行的数组,arr[i][j]选择第i行第j个元素。
int main()
{
int arr[3][3] = { {1,2,3},{4,5,6},{7,8,9} };
for (int i = 0; i < 3; i++)
{
for (int j = 0; j< 3; j++)
{
printf("%p\n", &arr[i][j]);
}
}
}经过打印发现二维数组在内存中是连续分布的,只不过为了方便理解,我们把它想象成二维的。

二、数组作为函数参数
1、一维数组传参
我们先来看一下一维数组传参。
int size(int arr[]) //int size(int* arr)
{
return sizeof(arr);
}
int main()
{
int arr[3];
int size1=sizeof(arr);
int size2 = size(arr);
printf("%d %d", size1,size2);
}
从结果可以看出,当数组作为函数参数时,函数并不会傻乎乎的把真个数组全部拷贝一份,而是会取数组首元素的地址。所以一维数组传参函数的参数既可以写成数组,也可以写成指针,反正传过去的都是首元素的地址。
2、二维数组传参
在一维数组arr中,arr相当于首元素的地址,等同于&arr[0]。而&arr相当于整个数组的地址,对整个数组解引用等于首元素的地址(说实话我也不太懂为啥,但语法就这么规定的),想要接受整个元素的地址,必须用数组指针。
在二维数组arr中,类比一维数组,arr是首元素的地址,二维数组的首元素就是第一行数组,所以arr就是整个第一行数组的地址。所以二维数组传参要用二维数组接收或者用数组指针接收。
void test1(int arr[][3])//和二维数组定义时相同,行元素个数可以省略,列不可以
{}
void test2(int(*p)[3])
{}
int main()
{
int arr[3][3];
test1(arr);
test2(arr);
}三、用指针控制二维数组
对二维数组arr来说,arr是第一行数组的地址,arr+i是第i行数组的地址,*(arr+i)是第i行数组首元素的地址(上面提到了,一个数组的地址解引用等于首元素的地址)。所以*(*(arr+i)+j)就拿到了元素arr[i][j]。
总结
以上就是今天要讲的内容。本文主要是对二维数组一些易混淆的零碎知识进行了讲解,希望能给大家带来帮助。感谢阅读,来日方长,期待下次见面。
边栏推荐
猜你喜欢

高效时代,电商运营如何靠RPA快速提效?

It's time for bank data people who are driven crazy by reporting requirements to give up using Excel for reporting

边缘计算开源项目概述

数据库mysql

AlterNET Studio用户界面设计功能扩展

HCIA动态主机配置协议实验(dhcp)

查看变量的数据格式

postman下载安装汉化及使用

RetinaFace: Single-stage Dense Face Localisation in the Wild

百数应用中心——选择一款适合企业的标准应用
随机推荐
【Flink 问题】Flink 如何提交轻量jar包 依赖该如何存放 会遇到哪些问题
shell中计算命令详解(expr、(())、 $[]、let、bc )
JSP页面中page指令contentPage/pageEncoding具有什么功能呢?
MySQL读写分离与主从延迟
四字节的float比八字结的long范围大???
Openwrt_树莓派B+_Wifi中继
你有了解过这些架构设计,架构知识体系吗?(架构书籍推荐)
JSP中page指令的import命令具有什么功能呢?
百数应用中心——选择一款适合企业的标准应用
中国发布丨滴滴因违反网络安全法等被罚80.26亿元!调查细节公布
PyQt5安装配置(PyCharm) 亲测可用
XML简介
day——05 迭代器,生成器
二分类和多分类
Worship, Alibaba distributed system development and core principle analysis manual
AlterNET Studio用户界面设计功能扩展
高效时代,电商运营如何靠RPA快速提效?
Scala类型转换
LeetCode第三题(Longest Substring Without Repeating Characters)三部曲之一:解题思路
【Redis】Jedis