C++ 不明白array-1是什么意思
我在理解这个代码方面有问题,尤其是vet-1部分。 这是什么意思?它返回数组中的哪一项?谢谢C++ 不明白array-1是什么意思,c++,c,arrays,C++,C,Arrays,我在理解这个代码方面有问题,尤其是vet-1部分。 这是什么意思?它返回数组中的哪一项?谢谢 #include <stdlib> #include <iostream> using namespace std; void change( int m, int n[7]); int main(){ int vet[] = {1,2,3,4,5}; change(vet[4],vet-1); change(0,&vet[4]); int i=0; for (i=
#include <stdlib>
#include <iostream>
using namespace std;
void change( int m, int n[7]);
int main(){
int vet[] = {1,2,3,4,5};
change(vet[4],vet-1);
change(0,&vet[4]);
int i=0;
for (i=0;i<5;i++) cout << vet[i];
return 0;
}
void change( int m, int n[7]) {
(*(n+m))--; m++; n--;
}
vet-1试图引用vet[0]前面的元素指针
实际上,这样做的行为是没有定义的。所以整个程序是未定义的
这里没有什么需要理解的;继续前进 我认为这是UB,因为vet-1超出了绑定数组,即使没有延迟。顺便说一句,afaik C既没有iostream头,也没有名称空间std@Jarod42:是的,你说得对。唯一的例外是vet+5。它可能尝试使用C数组,但由于超出了界限而失败。由于语法错误,它甚至无法编译!完全正确。特别是如果是一个面试问题。我也这么想,但是为什么程序打印一些东西而不是给运行时错误?@ FrancescoMarzetta:因为当你使用[]访问一个元素时,C++假设你知道你在做什么。如果希望抛出异常,请使用.at@FrancescoMarzetta,这是未定义行为的一部分。程序可能会崩溃,但不一定会。