gpt4 book ai didi

c - 返回数组指针产生 "warning: return from incompatible pointer type"

转载 作者:行者123 更新时间:2023-11-30 20:39:04 25 4
gpt4 key购买 nike

我正在阅读 C 语言,我发现你不能从函数返回数组,但你可以从这个源返回一个指针:Link .

编译器给出这个警告:

test.c:50: warning: return from incompatible pointer type

我编写了与他们给出的类似的代码,但我收到了

/*¯¯¯Input to Values¯¯¯*/
int * lineToXY(char line[]) {
int i,j,k;
double x,y;
char xvalue[15];
char yvalue[15];
static double xypair[2];
/*Split into two strings*/
for (i=0;sizeof(line)>i;i++) {
if (isValidChar(line[i])) {
for (k=0;isValidChar(line[i+k]);k++) {
xvalue[k] = line[i+k];
}
break;
}
}
for (i=i+k;sizeof(line)>i;i++) {
if (isValidChar(line[i])) {
for (k=0;isValidChar(line[i+k]);k++) {
yvalue[k] = line[i+k];
}
break;
}
}
/*Parse each string as a double*/
x = strtod(xvalue, NULL);
y = strtod(yvalue, NULL);
xypair[0] = x;
xypair[1] = y;
return xypair; /*<-------- this is the line which the compiler is referring to.*/
}

上面的代码来自于:http://pastebin.com/jU48qypV

提前致谢,希望大家度过一个愉快的圣诞节。

最佳答案

您返回的对象的类型与函数的返回类型不匹配:

int * lineToXY(char line[]) { -----+   You've declared lineToXY to return a pointer to
... | int, but you declare xypair as an array of
static double xypair[2]; --------+ double; in the return statement, the expression
... | xypair "decays" to an expression of type
return xypair; <-----------------+ double *, which is not int *, hence your warning
}

除非它是 sizeof 或一元 & 运算符的操作数,或者是用于在声明中初始化数组的字符串文字,否则 T 的 N 元素数组”类型的表达式将被转换(“衰减”)为“指向 T 的指针”类型的表达式,并且表达式的值将是数组第一个元素的地址;这个表达式不是左值(IOW,它不能是赋值的目标)。

假设您将函数的返回类型更改为 double *,此代码将有效,但是...

通过声明 xypair static,您将创建一个存在于该函数的所有调用中的单个实例;这通常不是一个好主意。该函数不再可重入,这对于您的目的来说可能重要也可能不重要,但这不是一个好习惯。

更好的方法是将目标数组传递给函数,而不是尝试返回它:

void lineToXY( char line[], size_t linesize, double xypair[] )
{
}
...
int main( void )
{
char inputLine[SOME_SIZE];
double pair[2];
...
lineToXY( inputLine, sizeof inputList, pair );
...
}

关于c - 返回数组指针产生 "warning: return from incompatible pointer type",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27711885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com