C 什么是;20“;[1] 是吗?
在一次测试中,我们被告知要找出一些表达式的值 除了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
“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或48a[b]
是c中*(a+b)的语法糖。它的作用与1[“20”
相同@IanAbbott或真有趣的问题是“20”[2]的值是多少?:-)@BobJarvis说,有趣的答案是“30分钟内吃披萨……预付!!”:)如果这意味着为了得到“免费”披萨我不得不加班的话,那就不是了-(为什么这是一个有趣的问题?“20”
是一个包含3个元素的数组,因此“20”[2]
返回最后一个元素。@thebusybee-它很有趣,因为它返回的是你看不见的东西。这是面试官(似乎)喜欢的一种诡计问题。