【发布时间】:2023-03-14 01:20:01
【问题描述】:
我的一个朋友第一次学习C++,给我发了这个sn-p:
int foo[] = { 3, 38, 38, 0, 19, 21, 3, 11, 19, 42 };
char bar[] = " abcdefghijklmnopqrstuvwxyz01234567890+-,.!?-_";
for (int i = 0; i < 10; ++i) {
std::cout << foo[i][bar];
}
乍一看,我告诉他这不起作用 - 我认为它不会编译,或者至少会导致访问冲突,因为 foo 不是二维数组,他回答说有。
我自己尝试过,令我惊讶的是,sn-p 运行得非常好。问题是:为什么?
根据逻辑、常识和良好实践,语法应该是bar[foo[i]]。
我很惭愧地承认我不知道发生了什么。在这种情况下,foo[i][bar] 的有效语法是什么?
【问题讨论】:
-
这不是完全重复的,答案很有趣。这两个问题的根本原因是相同的,但 StackOverflow 上的数百个问题都是如此。
-
顺便说一句:如果我会做这些事情,我只会同意输出......
-
有趣的是,如果您阅读了链接的问题,这实际上是有道理的,但仍然与您不理解它时一样不合逻辑;不合逻辑的部分只是从“这是如何工作的”转变为“他们为什么让这个工作”。
-
这与其说是语法问题,不如说是语义问题。
标签: c++ arrays indexing syntax semantics