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

时间:2019-12-04 14:00:00

标签: c arrays array-indexing

在一次考试中,我们被告知要查找某些表达式的值。

除1之外的所有其他字符都清晰可见,即"20"[1]。我以为它是数字的第一个索引,所以0,但是在计算机上测试时它会显示48

该“功能”的确切作用是什么?

3 个答案:

答案 0 :(得分:7)

这不是函数,只是索引数组。

"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

根据ASCII encoding'0'的十进制值为48,这是最近几天最常见的编码。

答案 1 :(得分:3)

好吧,根据您的观点,它可以是'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

答案 2 :(得分:1)

在此下标表达式中

"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后缀表达式,后跟方括号[]   是数组对象元素的下标名称。的   下标运算符[]的定义是E1 [E2]等于   (*((E1)+(E2)))。由于适用于   二进制+运算符,如果E1是数组对象(相当于一个指针)   到数组对象的初始元素),并且E2是整数,   E1 [E2]表示E1的第E2个元素(从零开始计数)。

这是一个演示程序

#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