c - c 高级编程

标签 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. *(num+1)[1]**(num+2) 是同一事物的不同书写方式。即 num 的第三个元素。
  2. 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/

相关文章:

objective-c - 将 char 数组从 ObjC 传递到 C

c - 声明为常量和 volatile 的指针

c - 使用 Visual Studio 2008/Visual C++ 2008 Express 学习 C

c - 从没有任何库的字符串中删除字符

c - 将一个数字范围映射到另一个

c - 如何从该进程中分辨出该进程的父进程 pid?

c - 下溢然后溢出无符号变量不好吗?

c - 线程数组中的第一个线程在 c 中被跳过(有时)?

c - 这个 Ocaml 类型定义在其 C stub 中会是什么样子?

c - freeRTOS环境下公共(public)变量的存储区