int lambda表达式与字符串/八进制? (C ++)

时间:2012-07-23 00:44:04

标签: c++ string octal

我接受过开放式书籍测试,并被告知我可以使用我需要的任何资源来回答这些问题,因为这更像是一种能力倾向测试 - 而且有一个问题让我真的很难过。

这个问题要求给出一个类似的函数 - 我确信我可以做 - 但我找不到关于函数正在做什么的很多信息,并且给出一个小样本,确定什么是很棘手的发生。

问题如下:

该程序打印什么?请写一个等效的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不是有效的八进制,但似乎对结果值有一些影响。

没有找到一个直接的答案(从我收集到的,这就是我使用家庭作业标签的原因),只是向正确的方向推进

感谢您的帮助

3 个答案:

答案 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的评论。