我有以下 C++ 代码:
#include <iostream>
using namespace std;
int main(){
}
int findH(int positionH[]){
return positionH; //error happens here.
}
编译器抛出错误:
invalid conversion from `int*' to `int'
这个错误是什么意思?
positionH[]
是一个数组,其返回类型为int
。
编译器不会让你这样做。要么将参数设置为 int:
int findH(int positionH){
return positionH;
}
或者将返回类型设置为指向 int 的指针:
int* findH(int positionH[]){
return positionH;
}
或者在返回之前将数组转换为整数:
int findH(int positionH[]){
return positionH[0];
}
此行是无效的 C++(也是无效的 C,您的代码似乎是用它编写的):
int bla[2] = findH(field, positionH);
bla 是一个包含 2 个元素的数组,不能以这种方式初始化。 findH 返回 int。
当您尝试执行以下操作时会出现此错误:
int *p =10;
这意味着您正在将
int
值分配给指针 *p
.
但是指针存储的是地址,这意味着
*p
正在将10
作为地址。
所以 就这样做:
int i=10;
int *p=&i;
或
p=&i;
它不会给出任何错误。
导致错误的原因是您返回了一个指针,但编译器需要一个 int。
int *
和int
之间有很大的区别。
还有为什么要返回“positionH”,数组是通过内存地址传递的,不需要返回它。
更好的代码是:
功能
// "field" 4 by 3, and "postionH" will got the last H letter
void findH(char** field, int positionH[]) {
for (int n = 0; n < 4 ; n++) {
for (int m = 0; m < 3; m++) {
if (field[m][n] == 'H') {
positionH[0] = n;
positionH[1] = m;
}
}
}
}
“主要”功能
int positionH[2];
char** field;
field = new char* [ 4 * sizeof(char*)];
for (int row = 0; row < 4; row++) {
field[row] = new char[3 * sizeof(char)];
}
field[0] = "SHH";
field[1] = "SSH";
field[2] = "HSH";
field[3] = "SHS";
// Call the above funtion
findH(field, positionH);
// Release memory
for (int n = 0; n < 4; n++) {
delete field[n];
}
delete [] field;