“20”[1] 是做什么的?

What does "20"[1] do?

在一次考试中,我们被要求求出一些表达式的值。

除 1 人外,其他人都清楚,即 "20"[1]。我认为这是数字的第一个索引,所以 0,但用它打印的计算机测试 48

'function' 到底有什么作用?

这不是一个函数,它只是索引一个数组。

"20" 这是一个字符数组,我们取索引 1 处的值 - 即 '0' - 字符 '0'.

这与

相同
char chArr[] = "20";       // using a variable to hold the array 
printf ("%d", chArr[1]);   // use indexing on the variable, decimal value 48
printf ("%c", chArr[1]);   // same as above, will print character representation, 0

'0' 的十进制值为 48,根据 ASCII encoding,目前最常见的编码。

好吧,根据您的观点,它可以是 '0'、48 或 0x30。

#include <stdio.h>

int main()
  {
  printf("'%c' %d 0x%X\n", "20"[1], "20"[1], "20"[1]);

  return 0;
  }

以上打印

'0' 48 0x30

在这个下标表达式中

"20"[1]

"20" 是类型为 char[3] 的字符串文字。在表达式中使用,文字被转换为指向其第一个元素的指针。

所以这个表达式

"20"[1]

产生字符串文字的第二个元素,即 '0'

你可以把这张唱片想象成

char *p = "20";

char c = p[1];

48是字符'0'.

的ASCII值

更奇特的记录可以看起来像

1["20"]

相当于之前的记录。

来自 C 标准(6.5.2.1 数组下标)

2 A postfix expression followed by an expression in square brackets [] is a subscripted designation of an element of an array object. The definition of the subscript operator [] is that E1[E2] is identical to (*((E1)+(E2))). Because of the conversion rules that apply to the binary + operator, if E1 is an array object (equivalently, a pointer to the initial element of an array object) and E2 is an integer, E1[E2] designates the E2-th element of E1 (counting from zero).

这是一个演示程序

#include <stdio.h>

int main(void) 
{
    printf( "\"20\"[1] == '%c' and its ASCII value is %d\n", "20"[1], "20"[1] );
    printf( "1[\"20\"] == '%c' and its ASCII value is %d\n", 1["20"], 1["20"] );

    return 0;
}

它的输出是

"20"[1] == '0' and its ASCII value is 48
1["20"] == '0' and its ASCII value is 48