求解释:指针跟多位数组的一道题

T0Ols 2010-10-16 02:25:07

...
int zippo[4][2]{(2,4),(6,8),(1,3),(5,7)}

问题一:输出: zippo[1][2]为啥等于3呢啊?
问题二:输出:**zippo 俩个* 为啥等于2呢
问题三:输出*(*(zippo+1)+2)这个为啥等于3
我调试跟踪看汇编来着,还是没有懂,能解释一下吗 谢谢大家了

...全文
164 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
T0Ols 2010-10-20
  • 打赏
  • 举报
回复
没人了...........
T0Ols 2010-10-16
  • 打赏
  • 举报
回复
还是没懂呢[Quote=引用 13 楼 t0ols 的回复:]
int zippo[4][2]={(2,4),(6,8),(1,3),(5,7)}
zippo[0][0] == 4
zippo[0][1] == 8
zippo[1][0] == 3
zippo[1][1] == 7
zippo[2][0] == 0
zippo[2][1] == 0
zippo[3][0] == 0
zippo[3][1] == 0
**zippo==4
*……
[/Quote]
shexinwei 2010-10-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 eclipse_2 的回复:]
第一个溢出了吧 结果与编译器有关 我的是0
第二个**zippo = *((zippo +0)+0)=zippo[0] =2
第三个就是等于zippo[1][2] 情况一样
[/Quote]

正解。
T0Ols 2010-10-16
  • 打赏
  • 举报
回复
int zippo[4][2]={(2,4),(6,8),(1,3),(5,7)}
zippo[0][0] == 4
zippo[0][1] == 8
zippo[1][0] == 3
zippo[1][1] == 7
zippo[2][0] == 0
zippo[2][1] == 0
zippo[3][0] == 0
zippo[3][1] == 0
**zippo==4
*(*(zippo+1) + 2)==0


这个我还是不怎么懂啊?
谁能挨个解释一下啊 我加分还不行吗啊
T0Ols 2010-10-16
  • 打赏
  • 举报
回复
请问zippo[0][0] == 4是为什么呢啊?
不是应该等于2吗[Quote=引用 11 楼 eclipse_2 的回复:]

引用 8 楼 t0ols 的回复:

C/C++ code
源码如下啊:
#include<stdio.h>
int main(void)
{
int zippo[4][2]= {(2,4),(6,8),(1,3),(5,7)};
输出zippo+1;zippo[0]+1;
*zippo +1
zippo[0][0]
*zippo[0]
zippo[1][2]
*((*……
[/Quote]
小魔菇 2010-10-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 t0ols 的回复:]

C/C++ code
源码如下啊:
#include<stdio.h>
int main(void)
{
int zippo[4][2]= {(2,4),(6,8),(1,3),(5,7)};
输出zippo+1;zippo[0]+1;
*zippo +1
zippo[0][0]
*zippo[0]
zippo[1][2]
*((*zippo+1)+2))
}


问题一:输出: zip……
[/Quote]

LZ不用看汇编 这个也看不什么东东出来
LZ用GDB调试吧 看看zippo的值
*zippo的值
&(zippo[0])的值等这些东东
T0Ols 2010-10-16
  • 打赏
  • 举报
回复
你说的都是错误的!!!

[Quote=引用 9 楼 dh_fa 的回复:]

int zippo[4][2]{(2,4),(6,8),(1,3),(5,7)}
由于"{""}"之间的是四个圆括号对,所以只是对zippo中的四个元素赋值了,每一个圆括号对中是一个逗号表达式,故zippo的数据是
4 8
3 7
0 0
0 0

zippo[0][0] == 4
zippo[0][1] == 8
zippo[1][0] == 3
zippo[1][1] ……
[/Quote]
dh_fa 2010-10-16
  • 打赏
  • 举报
回复
int zippo[4][2]{(2,4),(6,8),(1,3),(5,7)}
由于"{""}"之间的是四个圆括号对,所以只是对zippo中的四个元素赋值了,每一个圆括号对中是一个逗号表达式,故zippo的数据是
4 8
3 7
0 0
0 0

zippo[0][0] == 4
zippo[0][1] == 8
zippo[1][0] == 3
zippo[1][1] == 7
zippo[2][0] == 0
zippo[2][1] == 0
zippo[3][0] == 0
zippo[3][1] == 0

zippo实际上是有四个数组元素的数组,它的四个元素都是含有两个整型元素的数组,故zippo是数组名,一次用*zippo,相当于*(zippo + 0)获得的是数组的第0个数组元素的地址,再次用*,即**zippo,相当于*(*(zippo + 0)+0)等同于第0个数组元素名取值,也即是取得了zippo[0][0]的值。是4,而不是你说的2

*(*(zippo+1)+2)等同于zippo[1][2],分析和上面的类似,是0,而不是lz说的,c要加紧学习了哦!

完整的代码和结果如下


#include<stdio.h>
int main(void)
{



int zippo[4][2]={(2,4),(6,8),(1,3),(5,7)};
for(int i = 0; i < 4; i++)
{
for (int j = 0; j < 2; j++)
{
printf("zippo[%d][%d] == %d\n",i,j, zippo[i][j]);

}
}
printf("**zippo==%d\n",**zippo);
printf("*(*(zippo+1) + 2)==%d\n",*(*(zippo+1) + 2));


return 0;
}


T0Ols 2010-10-16
  • 打赏
  • 举报
回复
源码如下啊:
#include<stdio.h>
int main(void)
{
int zippo[4][2]= {(2,4),(6,8),(1,3),(5,7)};
输出zippo+1;zippo[0]+1;
*zippo +1
zippo[0][0]
*zippo[0]
zippo[1][2]
*((*zippo+1)+2))
}

问题一:输出: zippo[1][2]为啥等于3呢啊?
问题二:输出:**zippo 俩个* 为啥等于2呢
问题三:输出*(*(zippo+1)+2)这个为啥等于3
我调试跟踪看汇编来着,还是没有懂,能解释一下吗 谢谢大家了
shenchenman 2010-10-16
  • 打赏
  • 举报
回复
对数组名,代表了二维数组第一列的列地址,是一个二级地址,指向第一列第一行第一个元素,承载整个二维数组;
数组名加一个*,是将指针降一级,是行地址,也就是第一行的地址,虽然也是指向第一行第一列第一个元素,但是和数组名不是一个级别的指针,因为指针规模不一样,只承载了第一行;
再加一个*就是第一行第一个元素的值了。
shenchenman 2010-10-16
  • 打赏
  • 举报
回复
楼主程序有问题,肯定没有自己调试。我估计楼主给的程序不是自己写的,是自己想出来的吧。
int zippo[4][2]={(2,4),(6,8),(1,3),(5,7)};这样定义是为了什么?
如果是要定义4*2的二维矩阵,要这样:int zippo[4][2]={{2,4},{6,8},{1,3},{5,7}};也就是要用大括号,如果用小括号,你只给zippo[0][0],zippo[0][1],zippo[1][0],zippo[1][1]这四个值付了值,因为小括号里面用逗号处罚了逗号表达式,说明只用后面那个值。
小魔菇 2010-10-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 t0ols 的回复:]

同时俩个*是啥意思啊
[/Quote]
第一个*取的是二位数组中的第一个一维数组地址
第二个*取的是一维数组中第一个值
T0Ols 2010-10-16
  • 打赏
  • 举报
回复
同时俩个*是啥意思啊
dooX8086 2010-10-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 eclipse_2 的回复:]

第一个溢出了吧 结果与编译器有关 我的是0
第二个**zippo = *((zippo +0)+0)=zippo[0] =2
第三个就是等于zippo[1][2] 情况一样
[/Quote]
同理
一,越界....
二,三。 zippo[][] 与 **zippo 与 *zippo[] 一样,([] 有const, 而 * 没有const )
shenchenman 2010-10-16
  • 打赏
  • 举报
回复
没见到楼主的情况。请问,定义数组的那一行是这样么:
int zippo[4][2]={(2,4),(6,8),(1,3),(5,7)};
小魔菇 2010-10-16
  • 打赏
  • 举报
回复
第一个溢出了吧 结果与编译器有关 我的是0
第二个**zippo = *((zippo +0)+0)=zippo[0] =2
第三个就是等于zippo[1][2] 情况一样
【事件触发一致性】研究多智能体网络如何通过分布式事件驱动控制实现有限时间内的共识(Matlab代码实现)内容概要:本文档围绕多智能体网络中的事件触发一致性控制展开,重点研究如何通过分布式事件驱动控制策略实现多智能体系统在有限时间内达成共识,并提供了基于Matlab的代码实现。文档还涵盖了无人机路径规划、多目标跟踪、图像处理、故障诊断、优化算法等多个科研方向的技术实现与仿真案例,展示了事件触发机制在多智能体协同控制中的高效性与节能优势。核心技术包括分布式控制算法设计、事件触发条件设定、系统收敛性分析及仿真验证。; 适合人群:具备一定自动化、控制理论或计算机背景的研究生、科研人员及从事智能系统开发的工程师,熟悉Matlab编程与基本控制系统建模者更佳。; 使用场景及目标:①研究多智能体系统在资源受限条件下的协同控制问;②掌握事件触发机制相较于传统周期采样控制的优势;③实现多无人机、机器人等系统的高效协同与节能通信;④为分布式控制算法的仿真与验证提供可复用的代码框架。; 阅读建议:建议结合Matlab代码逐模块理解算法实现流程,重点关注事件触发条件的设计逻辑与系统稳定性证明部分,可进一步拓展至其他分布式优化与协同控制应用场景。
【四轴飞行器】非线性三自由度四轴飞行器模拟器研究(Matlab代码实现)内容概要:本文围绕非线性三自由度四轴飞行器模拟器的研究展开,重点介绍了基于Matlab的建模与仿真方法。通过对四轴飞行器的动力学特性进行分析,构建了非线性状态空间模型,并实现了姿态与位置的动态模拟。研究涵盖了飞行器运动方程的建立、控制系统设计及数值仿真验证等环节,突出非线性系统的精确建模与仿真优势,有助于深入理解飞行器在复杂工况下的行为特征。此外,文中还提到了多种配套技术如PID控制、状态估计与路径规划等,展示了Matlab在航空航天仿真中的综合应用能力。; 适合人群:具备一定自动控制理论基础和Matlab编程能力的高校学生、科研人员及从事无人机系统开发的工程技术人员,尤其适合研究生及以上层次的研究者。; 使用场景及目标:①用于四轴飞行器控制系统的设计与验证,支持算法快速原型开发;②作为教学工具帮助理解非线性动力学系统建模与仿真过程;③支撑科研项目中对飞行器姿态控制、轨迹跟踪等问的深入研究; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注动力学建模与控制模块的实现细节,同时可延伸学习文档中提及的PID控制、状态估计等相关技术内容,以全面提升系统仿真与分析能力。

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧