社区
C语言
帖子详情
关于二维数组与指针的几个搞不太清楚的地方
tuxyin
2010-12-02 09:46:31
int arr[5][4];
问1:
<1> arr
<2> arr[0]
<3> &arr[0][0]
<4> *arr
这几种种情况得到的是同一种结果吗?
问2:(*arr)+n 能得到二维数组所有元素地址吗?
问3:arr+n 等于 *(arr+n) 不?为啥?
问4:*arr[0] 等于 **arr 不?为啥?
...全文
154
8
打赏
收藏
关于二维数组与指针的几个搞不太清楚的地方
int arr[5][4]; 问1: arr arr[0] &arr[0][0] *arr 这几种种情况得到的是同一种结果吗? 问2:(*arr)+n 能得到二维数组所有元素地址吗? 问3:arr+n 等于 *(arr+n) 不?为啥? 问4:*arr[0] 等于 **arr 不?为啥?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wanlongpo
2010-12-04
打赏
举报
回复
int a[4][5];
aining0809
2010-12-03
打赏
举报
回复
我是这样理解的:
首先二维数组是有行列之分的,所以
arr是数组的首地址
&arr[0]是行地址
&arr[0][0]是列地址
其实上面的地址
值
是相同的,只是所解释的含义有所不同罢了。
而[]和*与&互为逆运算,例如*存在,就有可能将(行地址)->(列地址),而&则有可能将(列地址)->(行地址)
再例如:
a[0][0]是一个变量值
&arr[0][0]就是列地址,指向第0行的第一位
*(&a[0][0]):变量值->列地址->变量值
所以,以上问题的答案是
问1:
<1> arr (数组地址)
<2> arr[0] (列地址,&arr[0]是行地址)
<3> &arr[0][0] (列地址)
<4> *arr (行地址)
问2:(*arr)+n 能得到二维数组所有元素地址吗?
虽然是二维数组,但因为物理存储时连续的,所以是可以访问所有元素地址的。
问3:arr+n 等于 *(arr+n) 不?为啥?
值是相等的,但意义不同
arr+n是行地址,*(arr+n)是列地址
问4:*arr[0] 等于 **arr 不?为啥?
完全一致!首先这里得到的是数组值,只是表达的方式不太一样而已。
由列地址arr[0]通过*求的0行0列的值
由arr+0(行地址)-> *(arr+0)(列地址)-> *(*(arr+0)) 求得0行0列的值
----------
语无伦次,希望你能理解!
ForestDB
2010-12-03
打赏
举报
回复
关键:理解“类型”这一概念(原始类型,指针类型,数组类型);
C没有多维数组,只有数组的数组,即数组的元素是数组。
int arr[5][4];
问1:
<1> arr
arr是个数组有5个元素,每个元素又是个数组,有4个int
<2> arr[0]
arr[0]是个有4个int的数组
<3> &arr[0][0]
元素a[0][0]的地址
<4> *arr
这个和<2>一样,不过是用*来解引用的
这几种种情况得到的是同一种结果吗?
“值”相同,类型不同。
问2:(*arr)+n 能得到二维数组所有元素地址吗?
可以也不可以,可以是因为内存是平坦的,数组也是平坦的(而C是不检查越界的);
说不可以是因为由上*arr得到的是第0个int[4],+n得到的就是这个int[4]中的每个元素的地址。
问3:arr+n 等于 *(arr+n) 不?为啥?
不等于,arr是int[5][4]这样的类型,arr+n得到的是第n个元素(int[4]),而*(arr+n)是对int[4]解引用了,即每个int[4]中的第0个int。
问4:*arr[0] 等于 **arr 不?为啥?
等于,两种不同的解引用的方式。
bluewanderer
2010-12-02
打赏
举报
回复
数组的特点就是参与数值运算的时候会转换成对应的指针
char [5][4] -> char (*)[4]
char [4] -> char *
bluewanderer
2010-12-02
打赏
举报
回复
问1:
<1> arr (char (*)[4])
<2> arr[0] (char *)
<3> &arr[0][0] (char *)
<4> *arr (char *)
这几种种情况得到的是同一种结果吗?
前提是参与数值运算,并且不考虑类型,值都是一样的。后三个完全一样。
问2:(*arr)+n 能得到二维数组所有元素地址吗?
能
问3:arr+n 等于 *(arr+n) 不?为啥?
还是参与数值运算的话,并且不考虑类型,值一样
问4:*arr[0] 等于 **arr 不?为啥?
C里a[b]永远等价于*(a + b)
aa1013911535
2010-12-02
打赏
举报
回复
自己试试 啊
bullbat
2010-12-02
打赏
举报
回复
写几行测试代码 在汇编下看看 就明白了
MrEdifier
2010-12-02
打赏
举报
回复
LZ可以测试下,*arr和arr[0][0]值是否相等。这样就知道arr是否是指针的指针了。
Note-Station-to-markdown
这是一个跨平台脚本,可将 Synology Note Station 的笔记转换为 Markdown 文件。脚本使用 Python 编写,可在任何桌面平台上运行。 转换后您将获得: 1、以导出的笔记本命名的文件夹; 2、这些文件夹中以所有内联图片原位存储的 Markdown 语法纯文本文件笔记; 3、在笔记文本开头处分配标签和附件链接; 4、所有图片和附加文件都位于笔记本目录下的媒体子目录中。
区县-专精特新企业数量(2013-2025年).xlsx
详细介绍及样例数据:https://blog.csdn.net/li514006030/article/details/162965929
政府科技管理者如何通过区域科技创新数智大脑实现精准产业招商?.docx
科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。
易语言源码读取天气预报-模块
易语言源码读取天气预报-模块
面向高精度电流控制的PMSM多参数PSO辨识模型研究(Simulink仿真实现)
内容概要:本文围绕“面向高精度电流控制的PMSM多参数PSO辨识模型研究”,系统阐述了基于Simulink的永磁同步电机(PMSM)多参数辨识方法,重点采用粒子群优化算法(PSO)实现对电机关键内部参数的高精度辨识。研究构建了完整的PMSM控制系统仿真模型,结合智能优化算法,解决了传统参数辨识中精度低、收敛慢的问题,有效提升了电流环控制的动态性能与稳态精度。该方法特别适用于对控制精度和响应速度要求较高的工业应用场景,如高性能伺服系统、电动汽车驱动系统等,具有较强的工程实用价值和科研参考意义。文中提供了完整的Simulink仿真模型与配套代码,确保了研究内容的可复现性和实践操作性。; 适合人群:具备电机控制、自动化或电气工程等相关专业背景,熟悉MATLAB/Simulink仿真环境,从事电机驱动系统研发、控制算法设计或相关领域科研工作的工程师及研究生,尤其适合工作1-5年、希望深入理解先进参数辨识技术的研发人员。; 使用场景及目标:①开展高精度PMSM控制系统的设计与参数辨识研究;②学习并掌握PSO等智能优化算法在电机系统参数辨识中的具体实现与调优技巧;③完成学术论文复现、科研项目验证、毕业设计或工程原型开发,提升对现代电机控制核心技术的理解与应用能力。; 阅读建议:建议读者结合提供的Simulink模型与源代码进行动手实践,按照文档逻辑逐步搭建与调试仿真系统,重点关注PSO算法与电机模型的交互机制、目标函数设计及参数收敛过程,通过对比不同工况下的辨识结果,深入理解算法性能与控制精度之间的内在联系。
C语言
70,039
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章