“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
在一次考试中,我们被要求求出一些表达式的值。
除 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'
.
更奇特的记录可以看起来像
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