C编程-在下面的程序中,'\'在t[5\]中意味着什么[关闭]

问题描述 投票:0回答:3

考虑:

#include <stdio.h>

int main(void) {
    int i,t[5\];
    for(i = 0; i < 5; i++)
        t[i\] = 2 * i;
    i = 0;
    for(i = 0; i < 5; i++)
        i += t[i\];
    printf("%d",i);
    return 0;
}

数组中的

\
是什么意思?

我在CLA(C Programming Language Certified Associate)样本论文中找到了这个程序.

c arrays slash
3个回答
4
投票

程序不正确,

\]
是语法错误

一个可能的解释是作者不得不转义一些C运算符(例如

[
)来排版代码片段,他还转义了
]
,而文字处理软件似乎没有管...

忽略这些

\
或用
\]
替换所有出现的
]

注意,这是一个棘手的问题,写这段代码的程序员应该被解雇。

另请注意有问题的文件还有其他错误。例如第 11 题的内容是:

如果你尝试编译并运行这个程序会发生什么?

#include <stdio.h>
  int main(void) {
      int t[2\][3\] = { { 3, 2, 1 }, { 1, 2, 3} };
      printf("%d", sizeof(t) / sizeof(t[1\][1\]));
      return 0;
  }

一个。程序输出 6
B. 程序输出 3
C. 程序输出 2
D. 程序输出 4

忽略

\]
,程序有潜在的未定义行为,因为
%d
期望
int
但传递给
printf()
的值具有类型
size_t
.

第13、14、15、17题也有类似的问题


3
投票

意思是:

C++ 研究所主席 Christopher Boguslawski,

没有人正确检查他们的样题是否有错误。

代码不会按照编写的方式运行。

可以推测他们希望 \ 位于行尾(因为它是一个有效的行继续字符)并且忘记放入换行回车。虽然这可以解决问题,但没有意义为什么他们会在每个结束括号之前这样做。

更有意义的是,他们可能在整个文档中进行了“查找和替换”,并意外传播了错误。

推测:可能某些排字员将所有数组写为:

t<|5|>
(或其他一些使它们返回并用适当的括号替换的配置。)

然后他们懒惰地做了一个查找

<|
替换
[
没关系。

然后找到

|>
替换
\]
哪个不行。

哪种有意义,因为

\
]
在键盘上彼此相邻。 (他们可能指指点点。)

整个文档在每个

\
之前都有一个
]
的事实是确凿的证据。

所以它很可能是一个草率的查找/替换,它弃用了他们的整个文档。

所以这意味着

\
中的
t[5\]
是错误的。


1
投票

在这种情况下不允许使用反斜杠,这是无效的语法。 您可以在 ideone 在线 上验证它。 您收到以下错误:

prog.c: In function ‘main’:
prog.c:4:13: error: stray ‘\’ in program
    int i,t[5\];
             ^
prog.c:7:10: error: stray ‘\’ in program
       t[i\] = 2 * i; i = 0;
          ^
prog.c:11:15: error: stray ‘\’ in program
       i += t[i\];
               ^

如果你想编译代码没有错误,你只需要删除无效的

\
.

实际上,您使用反斜杠作为转义字符来使用它,例如在转义序列中使用它,例如换行符

'\n'
,这在here at wikipedia.

© www.soinside.com 2019 - 2024. All rights reserved.