2017-01-19 18 views
0

Ich habe ein kleines Problem in meiner C-Anwendung; Bitte helfen Sie mir, eine Lösung zu erreichen:C-Programm wurde nicht korrekt geschrieben

#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; 
} 

Wenn ich kompilieren dieses Programm der Compiler mir dieses Problem gibt:

[Warning] initialization from incompatible pointer type

Was bedeutet das und wie kann ich meinen Code ändern, damit es und läuft kompiliert korrekt?

+0

Der Code wird nicht kompiliert; Das '* p = t;' kann nicht außerhalb einer Funktion erscheinen. Sie könnten 'float * p = t;' haben - das wäre legitim. '* p' ist ein' float'; 't' degeneriert zu einem' float * '; deshalb beschwert sich der Compiler. –

+1

Beachten Sie auch, dass es für 'float t [5];' üblich ist, die For-Schleifen als 'für (i = 0; i <5; i ++)' zu schreiben, anstatt '<=' und 'Dimension minus ein'. Im Idealfall würden Sie 'for (int i = 0; i <5; i ++)' die meiste Zeit verwenden - das ist eher stilistisch, und es gibt Gründe, die Schleifensteuerung nicht so zu deklarieren (z. B. auf den Wert zugreifen zu müssen) nachdem die Schleife abgeschlossen ist). –

+0

Auch sollten "i" und "p" (insbesondere und in diesem Beispiel auch "t") lokale Variablen sein. Verwenden Sie Globals nur bei Bedarf - vermeiden Sie sie wenn möglich. –

Antwort

6

Sie können Code außerhalb einer Funktion nicht schlagen und hoffen, dass er in einer bestimmten Reihenfolge ausgeführt wird.

float t[5]; 

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

float *p = t; // fine 

int main (void) {} 
1

Dadurch

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

nicht

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

kompilieren stattdessen tun:

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

Aber die Zuweisung ist immer noch ungültig, wenn sie außerhalb einer Funktion angezeigt wird. –

+0

Das Ausführen des obigen Codes generierte einen Fehler - prog.cpp: 7: 1: Fehler: 'p' nennt keinen Typ p = t; –

+0

@GAURANGVYAS Danke :) jetzt habe ich überprüft, dass kompiliert .... –

0

Korrekturen werden kommentiert

#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; 
} 
Verwandte Themen