2013-10-03 27 views
1

我想問一個新手的問​​題,大約從函數返回一個值這裏是我的簡單的程序返回一個值:從功能

#include <stdio.h> 
double calcule(double r1,double r2, double r3) 
{ 
    double serie; 
    double parallele; 

    serie = r1 + r2 + r3; 
    parallele = (r1*r2*r3)/(r1*r2+r1*r3+r2*r3); 
    double results[2] = {serie,parallele}; 
    return *results; 
} 
int main() 
{ 
    double r1; 
    double r2; 
    double r3; 
    printf("Veuillez entrez les valeurs R1,R2 et R3"); 
    scanf("%lf",&r1); 
    scanf("%lf",&r2); 
    scanf("%lf",&r3); 
    double res[1] = {calcule(r1,r2,r3)}; 
    printf("Si les resistances sont branchées en série la resistance equivalente est : %f",res[0]); 
    printf("Si les resistances sont branchés en parallele la resistance equivalente est : %f",res[1]); 
    return 0; 
} 

我的問題是,爲什麼我要做「迴歸*的結果;」而不是僅僅做「返回結果」; ?

+0

1元素數組中只有'res [0]'沒有'res [1]'元素。 – ouah

回答

2

我在代碼中看到多個問題。

a)在函數calcule中聲明的數組變量'results'的範圍僅限於函數本身。一旦程序完成執行語句塊(函數),結果指向的變量位置就不再有效。嘗試訪問結果指向的位置發佈其作用域有時會導致訪問衝突錯誤。 b)你正在聲明變量的位置,請你。你的代碼用C99 std編譯得很好,但用c89和c90編譯時會受到影響。最好在塊的開始處執行所有類型聲明語句以實現可移植性。

#include "stdio.h" 
double calcule(double r1,double r2, double r3) { 
    double serie; 
    double parallele;  
    serie = r1 + r2 + r3; 
    parallele = (r1*r2*r3)/(r1*r2+r1*r3+r2*r3); 
    double results[2] = {serie,parallele};  /* a) scope is restricted to this block */ 
    return *results; 
} 

int main() { 
    double r1; 
    double r2; 
    double r3; 
    printf("Veuillez entrez les valeurs R1,R2 et R3"); 
    scanf("%lf",&r1); 
    scanf("%lf",&r2); 
    scanf("%lf",&r3); 
    double res[1] = {calcule(r1,r2,r3)}; /* b) type declaration not allowed here in c89/c90 */ 
    printf("Si les resistances sont branchées en série la resistance equivalente est : %f",res[0]); 
    printf("Si les resistances sont branchés en parallele la resistance equivalente est : %f",res[1]); 
    return 0; 
} 

代替我編寫代碼,我會給你函數原型。您可以使用它們來構建您的功能。

void calcule(double r1, double r2, double r3, double *output); 
int main (void){ 
    ... 
    double output[2]; 
    calcule(r1,r2,r3,output); 
    ... 
} 
0

因爲函數的返回類型是double*results的類型爲double,而results的指針類型爲double,即double *,因此無法從函數的返回類型定義爲double的函數返回指針。

1
*result

是== return[0]這樣:

return *results; 

是:

return results[0]; 

,它等效於:

return serie; 

serie是在結果陣列第0個元素。

我不知道很多關於你的代碼,但你的calcule()功能是做有用的,因爲所有其他變量是局部的作用只是相當於

double calcule(double r1,double r2, double r3) 
{ 
    return r1 + r2 + r3; // because serie = r1 + r2 + r3; 
} 

注意:儘管函數的返回類型是雙倍的,但如果返回result,它將是一個錯誤,因爲結果是double數組(但不是double)。此外,通過返回結果,您將返回代碼中導致未定義行爲的本地對象的地址。

0

該函數返回類型爲double的單個值。值results是兩個double值的數組。返回*results相當於返回數組中的第一個元素results[0]