2016-11-08 77 views
0

我想要發送2個參數(浮子和浮子的數組)的函數在C.如何通過浮子陣列和浮子作爲參數的函數用C

我收到此錯誤:

test.c:10:1: error: conflicting types for ‘result’ 
result(float *array, float number){ 
^ 
test.c:10:1: note: an argument type that has a default promotion can’t match an empty parameter name list declaration 
test.c:7:5: note: previous implicit declaration of ‘result’ was here 
    result(array, number); 

我的代碼是:

#include <stdio.h> 
#include <math.h> 

main() 
{ 
    float array[3] = {1.5, 2.6, 3.7}; 
    float number = 2.3; 
    result(array, number); 
} 

result(float *array, float number) 
{ 
    printf("number: %f\n", number); 
    printf("array 1: %f\n", array[1]); 
} 

我是新的C和知道,在其他語言THI s會工作,所以在這裏做什麼的任何幫助將不勝感激!

+5

把'result'定義的上方'main'。或者在那裏宣佈其原型。在C中,聲明必須在第一次使用之前出現。否則,編譯器會假定一些默認值通常不是你想要的(例如,假設參數是整數)。 – kaylum

+0

請注意,標準C和C90在使用前無需聲明或定義就可以調用函數,但C99和C11不允許這樣做。但是,由於在函數參數列表中將'float'轉換爲'double'的默認升級規則會在單個文件中造成麻煩,即使在C90中也是如此。 (預標準C在函數定義中不允許使用原型符號,所以在那裏不存在問題 - 但代碼也會有所不同。) –

回答

2

如果沒有原型,則無法訪問在main之後聲明的函數。重寫你的代碼是這樣的:

#include <stdio.h> 
#include <math.h> 

int result(float *, float); 

int main() 
{ 
    /* ... */ 
} 

int result(float *array, float number) 
{ 
    /* ... */ 
} 
3

的代碼是這樣的:`

#include <stdio.h> 
#include <math.h> 

void result(float array[3], float number){ 
    printf("number: %f\n", number); 
    printf("array 1: %f\n", array[1]); 
} 

main(){ 
    float array[3] = {1.5, 2.6, 3.7}; 
    float number = 2.3; 
    result(array, number); 
} 

`