当前位置:网站首页>二维数组零碎知识梳理
二维数组零碎知识梳理
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]。
总结
以上就是今天要讲的内容。本文主要是对二维数组一些易混淆的零碎知识进行了讲解,希望能给大家带来帮助。感谢阅读,来日方长,期待下次见面。
边栏推荐
- EdrawMax Crack,多合一的图表应用程序
- 你有了解过这些架构设计,架构知识体系吗?(架构书籍推荐)
- 自定义View实现波浪荡漾效果
- 向量组的线性相关性
- [Must read] Mylander valuation analysis, electrical stimulation products for pelvic and postpartum rehabilitation
- 天地图给多边形加标注
- What is the function of page directive contentPage/pageEncoding in JSP page?
- 测试时大量TIME_WAIT
- 主流监控系统工具选型及落地场景参考
- spark:商品热门品类TOP10统计(案例)
猜你喜欢
四字节的float比八字结的long范围大???
node封装一个图片拼接插件
软件exe图标变记事本或浏览器、360压缩打不开的几种应急解决方法
AutoJs学习-AES加解密
AlterNET Studio用户界面设计功能扩展
leetcode:81. 搜索旋转排序数组 II
OneinStack多版本PHP共存
SAP 云平台上一种 Low Code Development(低代码开发)解决方案
The god-level Alibaba "high concurrency" tutorial "basic + actual combat + source code + interview + architecture"
Overview of Edge Computing Open Source Projects
随机推荐
【微信小程序2】事件绑定
在 QT Creator 上配置 opencv 环境的一些认识和注意点
WebGPU 导入[1] - 入门常见问题与个人分享
数据库mysql
location对象,navigator对象,history对象学习
每天花2小时恶补腾讯T8纯手打688页SSM框架和Redis,成功上岸美团
破解wifi密码 暴力破解 保姆式教学
PyQt5 (a) PyQt5 installation and configuration, read from the folder and display images, simulation to generate the sketch image
It's time for bank data people who are driven crazy by reporting requirements to give up using Excel for reporting
动态规划每日一练(3)
Hikari连接池源码解读
AI目标分割能力,无需绿幕即可实现快速视频抠图
pycharm的基本使用教程(1)
cococreator 动态设置精灵
RestTemlate源码分析及工具类设计
C Language Basics_Union
AutoJs学习-存款计算器
你有了解过这些架构设计,架构知识体系吗?(架构书籍推荐)
Jenkins--基础--5.4--系统配置--全局工具配置
PyQt5安装配置(PyCharm) 亲测可用