一个关于C语言二维数组问题

探讨了C语言中一个有趣的二维数组引用现象,通过实验发现了一维引用背后的实际意义,并解释了这种引用方式的原理。

早些时间因为操作失误发现一个问题 代码如下: #include<stdio.h> void main() { int a[ ][5]={1};//定义一个二维数组a printf("%d",a[100]);//输出a[100] } 如果是以前,我会认为上面的代码肯定有错误…… 可是它居然能不出错误,且能输出一个整数,例如536 为什么? 我问了一个老师,为什么一个定义好的二维数组可以用一维数组去引用? 得到答复说:计算机在存储的时候不管是什么形式的数据都是一维的…… 我也知道老师所说的,但是这次老师似乎并没有给出一个合理的解释 如果,老师解释的正确,那么所有的二维数组都将可以用一维数组去引用,但是例如:int b[3][5] ,引用b[10],就

会出错…… 所以,这里必定存在其它的解释 我连续几次运行上述程序,发现那个输出的数据总是不变,也就是说它不是随机的, 难道是地址? 对了,在学习指针时,提到二维数组的行地址,所以这里也有可能是行地…… 为了验证猜想                                                             

下面我添加了条语句: printf("%d",&a[100][0]); 再次运行程序 输出了两个相同的数! 这说明上面的猜想是正确的……即这个程序中&a[i][0]与a[i]是同一个含义

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值