不明白array-1是啥意思
Posted
技术标签:
【中文标题】不明白array-1是啥意思【英文标题】:Don't understand what array-1 means不明白array-1是什么意思 【发布时间】:2018-06-07 09:48:18 【问题描述】:我无法理解这段代码,尤其是“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=0;i<5;i++) cout << vet[i];
return 0;
void change( int m, int n[7])
(*(n+m))--; m++; n--;
【问题讨论】:
我认为这是 UB,因为vet-1
超出了数组范围(即使没有被尊重)。
btw afaik C 没有 iostream 标头也没有命名空间 std
@Jarod42:是的,你是对的。唯一的例外是vet + 5
。
它可能会尝试使用 C 数组 a[b]
is the same as *(a + b)
的事实,但因超出范围而失败。
由于语法错误甚至无法编译
【参考方案1】:
vet - 1
试图引用指向元素的指针就在 vet[0]
。
实际上这样做的行为是未定义。所以整个程序是未定义的。
这里没什么好理解的;继续前进!
【讨论】:
“继续前进!” 字面意思。特别是如果这是一个面试问题。 我也是这么想的,但是为什么程序会打印一些东西而不是给出运行时错误呢? @FrancescoMarzetta:因为当您使用[]
访问元素时,C++ 假定您知道自己在做什么。如果要抛出异常,请使用.at
。
@FrancescoMarzetta 这是未定义行为的一部分。程序可能崩溃,但不是必须的。以上是关于不明白array-1是啥意思的主要内容,如果未能解决你的问题,请参考以下文章
我不明白如果消息过程只能使用一次,应该使用 trident 是啥意思