C 语言遇到一个奇怪的问题

#include <stdio.h>

int main(int argc, const char *argv[])
{
    int does[] = {1, 3, 2, 1000};
    printf("服用 %i 毫克的药物\n", 3[does]);
    return 0;
}

# 输出 服用 1000 毫克的药物
  1. 3[does] 这种写法不违反命名约定吗?
  2. does[3] == 3[does] 为什么会相等?
阅读 3.7k
5 个回答

回去看书,其实写成a[b]其实就是(a+b),于是b[a],也就是(b+a)也并没有什么错误。访问数组的元素其实就是根据地址+位移这样=。=

这两个的意思分别是 *(3+does)*(does+3) 你觉得呢?

新手上路,请多包涵

两者等价的间接访问表达式为:*(does + 3)*(3 + does)
括号表达式(does + 3)(3 + does)等价
所以,相等

新手上路,请多包涵

貌似两种写法是一个意思? 好奇怪,从来没见过

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进