2017-01-19 24 views
0

我的C程序有點問題;請幫我達成解決方案:C程序寫得不對

#include <stdio.h> 

float t[5]; 
int i; 
float *p; 

*p=t; 

int main (void) 
{ 

    for (i=0;i<=4;i++) 
    { 
     printf("t[%d]",i); 
     scanf("%f",&t[i]); 
    } 

    for (i=0;i<=4;i++) 
    { 
     printf("t[%d]=%f \n",i,*(p+i)); 
    } 

    return 0; 
} 

當我編譯該程序的編譯器給了我這個問題:

[Warning] initialization from incompatible pointer type

這是什麼意思,我怎麼能修改我的代碼,以便它可以編譯和運行是否正確?

+0

該代碼不能編譯; '* p = t;'不能出現在函數之外。你可能有'float * p = t;' - 這是合法的。 '* p'是一個'浮動'; 't'退化爲'float *';這就是編譯器抱怨的原因。 –

+1

另請注意,對於'float t [5];',通常將'for'循環寫爲'for(i = 0; i <5; i ++)'而不是使用'<='和'dimension minus一'。理想情況下,大多數情況下你會使用'for(int i = 0; i <5; i ++) - 這更具風格,並且有理由不聲明這樣的循環控制(例如需要訪問值循環完成後)。 –

+0

另外,'i'和'p'(特別是,在這個例子中,'t'也是)應該是局部變量。僅在必要時使用全局變量 - 儘可能避免使用全局變量。 –

回答

6

你不能在某個函數外打一些代碼,並希望它以某種順序執行。

float t[5]; 

float *p; 
*p=t; // illegal, you probably meant p=t; anyway 

float *p = t; // fine 

int main (void) {} 
1

這樣做

float t[5]; 
float *p; 
*p=t; 

不會編譯

error: incompatible types when assigning to type ‘float’ from type ‘float *’

做,而不是:

float t[5]; 
int i; 
float* p = t; 
+2

但是,分配在功能外顯示時仍然無效。 –

+0

運行上面的代碼生成一個錯誤 - prog.cpp:7:1:錯誤:'p'沒有命名一個類型 p = t; –

+0

@GAURANGVYAS謝謝:)現在我檢查了編譯.... –

0

更正被註釋掉

#include <stdio.h> 

float t[5]; 
int i; 
float *p; 

*p=t; //here use p=t as *p will dereference it and t is already a pointer type in this assignment both will mismatch 

int main (void) 
{ 

for (i=0;i<=4;i++) 
{ 
    printf("t[%d]",i); 
    scanf("%f",&t[i]); 
} 

for (i=0;i<=4;i++) 
{ 
    printf("t[%d]=%f \n",i,*(p+i)); 
} 

return 0; 
}