当前位置:网站首页>二维数组零碎知识梳理
二维数组零碎知识梳理
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]。
总结
以上就是今天要讲的内容。本文主要是对二维数组一些易混淆的零碎知识进行了讲解,希望能给大家带来帮助。感谢阅读,来日方长,期待下次见面。
边栏推荐
猜你喜欢

裁员趋势下的大厂面试:“字节跳动”

膜拜,Alibaba分布式系统开发与核心原理解析手册

【微信小程序2】事件绑定

新起点丨MeterSphere开源持续测试平台v2.0发布
![Detailed explanation of calculation commands in shell (expr, (()), $[], let, bc )](/img/3c/5cc4d16b9b525997761445f32802d5.png)
Detailed explanation of calculation commands in shell (expr, (()), $[], let, bc )

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

AutoJs学习-AES加解密

leetcode:81. 搜索旋转排序数组 II

Talk about the understanding of Volatile

LeetCode第三题(Longest Substring Without Repeating Characters)三部曲之一:解题思路
随机推荐
LeetCode_2358_分组的最大数量
SAP 云平台上一种 Low Code Development(低代码开发)解决方案
向量组的线性相关性
EPSANet: An Efficient Pyramid Split Attention Block on Convolutional Neural Network
LeetCode第三题(Longest Substring Without Repeating Characters)三部曲之一:解题思路
百战RHCE(第四十七战:运维工程师必会技-Ansible学习2-Ansible安装配置练习环境)
被报表需求逼疯的银行数据人,是时候放弃用Excel做报表了
next permutation
uvm-phase机制
【论文阅读】Distilling the Knowledge in a Neural Network
A little bit of knowledge - why do not usually cook with copper pots
Docker内MySQL主从复制学习,以及遇到的一些问题
nacos项目搭建
Redis数据结构
膜拜,Alibaba分布式系统开发与核心原理解析手册
自定义卡包效果实现
Worship, Alibaba distributed system development and core principle analysis manual
spark:页面单跳转换率统计(案例)
pnpm的安装与使用
“蔚来杯“2022牛客暑期多校训练营4