【发布时间】:2021-11-14 13:43:00
【问题描述】:
有一种我不明白的行为,每当数组的元素不等于它旁边的元素时,c 变量应该增加一,但是有一个自动完成的增量将c 增加一。我认为这是因为数组的最后一个元素与不等于它的东西进行了比较。为什么会这样?或者,如果我是对的,最后一个元素的比较对象是什么?
#include <iostream>
int main() {
int n, c = 0;
std::cin >> n;
std::string s[n];
for (int i = 0; i < n; i++) {
std::cin >> s[i];
}
for (int i = 0; i < n; i++) {
if (s[i] != s[i+1]) {
c++;
}
}
std::cout << c;
}
【问题讨论】:
-
请注意
std::string s[n];不是有效的 C++。可变长度数组仅适用于编译器扩展。见Why aren't variable-length arrays part of the C++ standard? -
1)
s[n]是一个可变长度数组,它是非标准的 2) 你的第二个for循环将访问越界内存,这是未定义的行为;到那时,所有赌注都结束了 -
@Muhamed Elsayed 是否有任何答案可以帮助您了解它的工作原理?如果是这样,请考虑accepting 的答案。