【发布时间】:2022-02-03 03:53:53
【问题描述】:
例如,如果我从大小为 2 的数组中减去大小为 3 的数组,则无论里面是什么,它都会返回 3。这是为什么呢?
例如:
int a[2] = {1,2};
int b[3] = {999,999,999};
cout << a-b;
输出为 3
【问题讨论】:
-
数组自然衰减为指向其第一个元素的指针。不相关指针的指针算术导致未定义的行为。你到底在做什么?请尝试创建minimal reproducible example 向我们展示。
-
嗨,对不起,我的问题有点令人困惑。我添加了我的测试示例。我只是对减去 2 个数组的作用感到困惑,我还没有在网上找到任何关于它的内容。
-
编写无效程序的方法有很多。这是其中之一。您不会发现大多数在线讨论的方式仅仅是因为有很多。
-
它减去指针。如果它们是指向同一数组的元素的指针,那将是合法的,但由于它们是不同的数组,因此行为是未定义的。
-
虽然这确实是未定义的行为,但可能发生的情况是编译器将数组彼此相邻放置在内存中。并且指针运算的结果总是以基类型为单位(所以你减去两个指向
int的指针,所以结果是以int元素为单位的)。不能依赖此行为始终或无处不在。
标签: c++