我接受过开放式书籍测试,并被告知我可以使用我需要的任何资源来回答这些问题,因为这更像是一种能力倾向测试 - 而且有一个问题让我真的很难过。
这个问题要求给出一个类似的函数 - 我确信我可以做 - 但我找不到关于函数正在做什么的很多信息,并且给出一个小样本,确定什么是很棘手的发生。
问题如下:
该程序打印什么?请写一个等效的getValue函数。
int t[]={1,2,3};
int getValue(int i)
{
return "\5\3\8"[t[i]];
}
void main()
{
printf("%d",getValue(2));
}
程序打印'0',这是一个简单的部分。我很想用一种简单的方法来回答这个问题。但我想更深入地了解getValue函数究竟发生了什么。我的主要好奇心是字符串部分在lambda表达式方面的作用,因为\ 8不是有效的八进制,但似乎对结果值有一些影响。
没有找到一个直接的答案(从我收集到的,这就是我使用家庭作业标签的原因),只是向正确的方向推进
感谢您的帮助
答案 0 :(得分:1)
转义码不是八进制,我相信它们是十进制的。在任何情况下,只要它们只占用一个字节,它们就无关紧要了。
追踪执行此操作是微不足道的。首先,我们考虑替换参数
int t[]={1,2,3};
int getValue()
{
return "\5\3\8"[t[2]];
}
int main() //int, not void
{
printf("%d",getValue());
}
t
的第三个值是3,它在字符串中产生第四个字符。由于字符串文字是三个字符,加上NULL终止符,因此第四个字符是NULL终止符。转换为整数时,此值为零。 printf
调用正确打印此整数。例如,类似的函数将直接索引到字符串中。
答案 1 :(得分:1)
好吧,跟踪执行情况。首先,使用2调用getValue。在内部,它首先计算t [i]的值,即t [2],即3.然后,它从字符串中获取索引3处的字符。
这部分值得一些解释。字符串常量由4个字符组成 - ASCII 5,ASCII 3,ASCII 8和终止空(ASCII 0)。由于字符串索引在C中从零开始,因此索引3处的字符为空。它是从字符串中检索的,从char扩展到int(当函数返回一个int时),并返回。在那里,印刷了它的提示。
字符串中的\__
表示法是指“带代码的字符__”。
答案 2 :(得分:0)
查看C FAQ 6.11。 Steve Summit要求人们不要将直接URL发布到FAQ项目,所以从http://www.c-faq.com/开始并导航到6.11。
另请注意Michael Burr对OP的评论。