函数 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 方法,因为您通过引用形式(指针)传递数组,这意味着数组正在就地更改。
我已经阅读了一些旧问题并测试了一些想法,但我的问题仍然存在,所以这就是我想要的:
我需要一个函数 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 方法,因为您通过引用形式(指针)传递数组,这意味着数组正在就地更改。