我试图通过引用和返回指针的函数来理解函数。我有一个以下代码抛出编译时错误:
"错误:`jamboree'"";
的参数1不兼容
这是我试图编译的代码。
#include <stdio.h>
main () {
float p = 23.5, *q;
float jamboree(float);
q = &p;
printf ("before call = %d\n", q);
q = jamboree(&p);
printf ("after call = %d\n", q);
}
float jamboree(float *i){
i = i + 1;
return(i);
}
修改了&#34;函数返回指针的相同代码&#34;工作正常:
#include <stdio.h>
main () {
float p = 23.5, *q;
float *jamboree(float *);
q = &p;
printf ("before call = %d\n", q);
q = jamboree(&p);
printf ("after call = %d\n", q);
}
float *jamboree(float *i){
i = i + 1;
return(i);
}
以上代码的输出是:
before call = 2673932
after call = 2673936
Q1。为什么我为第一个代码(通过referance传递)获得参数1的不兼容类型。
答案 0 :(得分:4)
您在第5行的jamboree()
声明表示您将传递float
,但第12行的jamboree()
定义表示您要通过指针浮动。因此声明和定义不同意,并且您收到错误。在您的“函数指针”版本中,声明和定义一致。
答案 1 :(得分:1)
您的声明和定义在第一段代码中并不匹配。在第一个代码中,您声明:
float jamboree(float);
这意味着在jamboree函数中,您正在发送浮点值并返回浮点值。 但是当你实现了功能:
float jamboree(float *i){
i = i + 1;
return(i);
}
您正在接收浮点指针并返回浮点值。这与宣言不同。因此,您将收到编译器错误。
答案 2 :(得分:1)
我没有足够的声誉来添加提交,所以我在这里写下我的答案。我想说的是尽管上面指出了问题:你的声明和定义与不匹配,但是函数也存在类型匹配问题。
float jamboree(float *i){
i = i + 1;
return(i);
}
您返回float *
类型,预期类型为float
。因为i = i+1
是下一个指针地址。