了解将地址传递给函数以及返回指针的函数

时间:2016-05-24 04:53:50

标签: c pointers

我试图通过引用和返回指针的函数来理解函数。我有一个以下代码抛出编译时错误:

  

"错误:`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的不兼容类型。

3 个答案:

答案 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是下一个指针地址。