C 什么是;20“;[1] 是吗?

C 什么是;20“;[1] 是吗?,c,arrays,array-indexing,C,Arrays,Array Indexing,在一次测试中,我们被告知要找出一些表达式的值 除了1个外,其他都很清楚,即“20”[1]。我以为这是数字的第一个索引,所以0,但是用计算机测试它会打印48 “函数”到底是做什么的?它不是一个函数,它只是索引一个数组 “20”这是一个字符数组,我们在索引1处取值,即'0'-字符'0' 这和 char chArr[] = "20"; // using a variable to hold the array printf ("%d", chArr[1]); // use index

在一次测试中,我们被告知要找出一些表达式的值

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


“函数”到底是做什么的?

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

“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

嗯,根据您的观点,它是
'0'
、48或0x30

#include <stdio.h>

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

  return 0;
  }

在这个下标表达式中

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

所以这个表达式

"20"[1]
"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;
}

“我以为这是数字的第一个索引,所以0,”你说得对。它是
字符
'0'
,如果你看an,你会发现它的值(作为一个整数)是
48
'0'
在ASCII中是0x30或48
a[b]
是c中*(a+b)的语法糖。它的作用与
1[“20”
相同@IanAbbott或
真有趣的问题是“20”[2]的值是多少?:-)@BobJarvis说,有趣的答案是“30分钟内吃披萨……预付!!”:)如果这意味着为了得到“免费”披萨我不得不加班的话,那就不是了-(为什么这是一个有趣的问题?
“20”
是一个包含3个元素的数组,因此
“20”[2]
返回最后一个元素。@thebusybee-它很有趣,因为它返回的是你看不见的东西。这是面试官(似乎)喜欢的一种诡计问题。