最近在练习写程式的时候碰到一些问题,想来请教一下,以下是程式码:
https://pastebin.com/pzgHN0bt
执行结果:
https://i.imgur.com/9v2nirr.jpg
有两个问题:
1.我的想法是,a为一个储存a[0]的位置的指标,而a[0]又存放著指向a[0][0]资料的指
标,但是照理说,这两笔资料不是应该存在不同位置的吗?
2.那既然上面都已经输出了相同的地址,那我把一样的地址拿去取值,却得到不一样的
结果,不知道原因为何。
你可以看二维阵列的实际内存内容怎么配你编辑这么多次网址还是错的 = = 可以换行吗
阵列 != 指标 最简单的例子 你去sizeof(a)
建议搜寻 array vs pointer 多看几次就搞懂了
后来我有自己手动去用动态配置内存用出一个2维阵列测试看看,可是结果跟输出a与a[0]的答案是不同的,但是系统配的二维阵列却不一样,不太明白为什么。
动态配置内存你操作的对象是指标不是阵列你要弄懂的是指标跟阵列的操作区别
指标跟阵列的类别不同 只是你刚好可以用指标存取阵列 但指标阵列两者并不等价
*a应该是pointer,只是不解为什么a==*a上网查过后,还是不清楚手动生成一个二维阵列,跟自动生成的array为什么会有这种差别手动生成的2维阵列:paste in.com/TwsxYLeE
原来如此,那两笔不同资料,,得到相同的地址,该如何解释才好呢,查过array跟pointer的关系后还是不知道原因,是本身这么做就没定义吗?
指标可以对任何型别的资料进行存取 你甚至可以用其他型别来解释上面已经告诉你了 sizeof(array)跟sizeof(pointer)结果不同 阵列的大小是已经决定好的至于a、a[0]、a[0][0]、*a、*a[0]这是语法定义
作者: kaneson (Lance) 2019-09-12 18:50:00
指标的[]只是语法糖, 运作方式跟阵列的[]不太相同,写法刚好一样而已