2017-01-19 7 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'は' float'です。 't'は' float * 'に縮退します。そのため、コンパイラが不平を言うのです。 –

+1

'float t [5];'の場合、 'for = 'を使用するのではなく、' for 'ループを' for(i = 0; i <5; i ++) 1'。理想的には、ほとんどの場合、 '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:error: '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; 
} 
関連する問題