c - 谜题: "[] is symmetric"?

标签 c arrays variables integer puzzle

<分区>

我正在尝试解开这个谜团:

int direction = 1;
char direction_name = direction["nsew"];

比如它为什么首先编译,它到底想证明什么,它有什么用?


我在一个网站上发现了这段代码,除了“[] 是对称的”之外没有其他相关解释。我的意思是我应该如何处理这些信息..

最佳答案

这段代码等同于:

#include <stdio.h>

int main(void) {
    char direction_name = 1["nsew"];
    printf("[%c]\n",direction_name);
    return 0;
}

哪个will print [s], 因为

char direction_name = 1["nsew"]; // "nsew" is string literal, i.e. an array
                                 // of 5 chars 'n' 's' 'e' 'w' '\0'

等于

char direction_name = "nsew"[1];

还有

char direction_name = *("nsew" +1);

因此 [] 在某种意义上是对称的

x[y] == y[x] // if conditions given in C standard 6.5.2.1/2 are met

您可以将 [] 视为代数中的对称关系(根据 6.5.2.1 § 2 的假设):

enter image description here

或者您可以将 [] 视为 reflexive 之间的线性映射(转换,函数) ( Banach ) 线性空间 V 和 V** 如果您愿意:

x[f] = [f,x] = f[x]

C标准n1124 6.5.2.1 § 2 数组下标(强调main)

后缀表达式后跟方括号 [] 中的表达式是数组对象元素的下标名称。下标运算符[]的定义是E1[E2]等同于(*((E1)+(E2))) .由于适用于二元 + 运算符的转换规则,如果 E1 是一个数组对象(等效地,指向数组对象初始元素的指针)并且 E2 是一个整数E1[E2] 指定E1 的第E2 元素(从零开始计数)。

关于c - 谜题: "[] is symmetric"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32016359/

相关文章:

C : How to detect if execvp waiting for standard input?

Java:通过名称调用和访问数组,该名称存储在不同数组或变量内的字符串中

c# - Array.ToString() 返回 System.Char[] c#

variables - GNU 在多行变量声明中做出了差异

JAVA - 变量始终为空

使用C代码计算库仑定律

c - 此 C 代码片段中的 "p?p->next:0"是什么以及如何运行它?

C - 矩阵 > 仅正元素

arrays - 在 C 中只打印一次数组中的所有元素?

mysql - SQL语句中如何使用变量名?