函数 returns 损坏的数组

Function returns a corrupted array

我已经阅读了一些旧问题并测试了一些想法,但我的问题仍然存在,所以这就是我想要的:

我需要一个函数 returns 一个固定大小为 181 个整数值的简单数组。

经过一些测试我有这个功能:

int *Sonar::scan(int *distances) {
    // Scanning
    for (int i = 0; i <= 180; i++) {
        // Rotates sonar
        //this->rotate(i);
        // Gets the distance
        //distances[i] = this->getDistance();
        distances[i] = i;
    }
    // Returns
    return distances;
}

并这样称呼它:

            // Sonar
            case 's':
                int distances[181];
                *distances = sonar.scan(distances);
                for (int i = 0; i <= 180; i++) {
                    Serial.println(String(i) + ": " + String(distances[i]));
                }
                break;

但我得到了这个结果:

0: 1898
1: 1
2: 2
3: 3
4: 4
...

索引 0 的值一直被损坏。那么我犯了什么错误?

当您执行以下操作时,数组的第一个元素将被指向数组的指针覆盖:

*distances = sonar.scan(distances);

那是因为您使用 *distances 取消引用数组,给出对第一个元素的引用。然后,您使用 scan 方法(指向数组的指针)中的 return 分配给它。

正在做:

sonar.scan(distances);

会得到你期望的结果。

不需要 return 方法,因为您通过引用形式(指针)传递数组,这意味着数组正在就地更改。