#include <stdio.h>
void main(){
short num[3][2]={3,6,9,12,15,18};
printf("%d %d",*(num+1)[1],**(num+2));
}
答案是15 15!!
请问谁能帮我解释一下吗?
最佳答案
*(num+1)[1]
和**(num+2)
是同一事物的不同书写方式。即num
的第三个元素。num
的类型为short (*)[2]
。也就是说,它是一个指向 2 个短值数组的指针。
记住这两个事实,我们就可以弄清楚代码在做什么。为了简单起见,下面假设使用 32 位系统。
num+1
。由于num
指向两个short
值,使用指针算术,num+1
将是num<之后的4个字节(2个short)/
。(num+1)[1]
。数组索引给出从num+1
开始的第二个元素。这意味着num+1
又多了 4 个字节,因此num
又多了 8 个字节。- 访问
num
之后的 8 个字节正好给出15
。
关于c - c 高级编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32449631/