在查看C中的一些概念性问题时,我在一本书中遇到了这个问题。 以下程序的输出是什么?
#include<stdio.h>
#include<string.h>
int main()
{
static char s[25]="The cocaine man";
int i=0;
char ch;
ch=s[++i];
printf("%c",ch);
ch=s[i++];
printf("%c",ch);
ch=i++[s];
printf("%c",ch);
ch= ++i[s];
printf("%c\n",ch);
return 0;
}
答案:
hhe!
有谁能解释一下这个输出是怎么来的?
答案 0 :(得分:3)
从第一次作业开始
ch=s[++i];
递增i(i = 1)并在ch
的索引(i = 1)处指定s
字符。
ch=s[i++];
在ch
的索引(i = 1)处指定s
字符,然后递增i(i = 2)。
ch=i++[s];
在ch
的索引(i = 2)处指定s
字符,然后递增i(i = 3)。密钥:s[i] == i[s]
。
ch= ++i[s];
在s
的索引(i = 3)处递增ASCII值并将其赋值给ch。密钥:[]
的优先级高于前缀++
答案 1 :(得分:1)
答案 2 :(得分:0)
首先是i=0
,现在是s[++i]
,i = 1而s[1]
会给h。
现在s[i++]
,s[1]
h
,{i}为2。
i++[s]
,我们必须知道i[s]==s[i]
。现在,它将s[2]
为e
,值为i = 3.
现在,对于最重要的部分++i[s]
,我们可以将其视为++(i[s])
,因为
[ ]
运算符的优先级高于++
。由于i[s]
是char值,++
运算符将处理其ASCII值为s[3]
,即(空格)为32 http://www.asciitable.com/的ASCII值。 32增加1并变为33,它是!的ASCII值。