不明白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 是啥意思

接口是啥意思?

TypeScript 中的“环境”是啥意思

Java中的“同步”是啥意思? [复制]

超级简单C语言请详细解释黄色字体 Succs[snum++]=i 不明白sum++是啥意思,后面

想做一个图片切换的JS 看到这句三元运算符不明白是啥意思