c。高级编程

时间:2015-09-08 05:08:17

标签: c

#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 !!

请你们中的任何人解释一下吧!

1 个答案:

答案 0 :(得分:5)

  1. *(num+1)[1]**(num+2)是编写相同内容的不同方式。也就是num的第三个元素。
  2. num的类型为short (*)[2]。也就是说,它是指向2 short个值的数组的指针。
  3. 考虑到这两个事实,我们可以弄清楚代码在做什么。为简单起见,下面假设一个32位系统。

    • num+1。由于num指向两个short值,使用指针算法,num+1将在num之后为4个字节(2个短路)。
    • (num+1)[1]。数组索引给出了从num+1开始的第二个元素。这意味着超过num+1的另外4个字节,因此超过num的8个字节。
    • num之后访问8个字节会准确地提供15