2017-06-05 5 views
0

im Lernen c Programmierung. Ich möchte ein globales struct Array von definieren. also würde ich einen Zeiger auf dieses Array haben, dass jedes Mitglied des Arrays eine Struktur komplexer Zahlen ist. Mein Ziel ist es, mit seinem Zeiger (* vars) auf dieses Array zugreifen zu können und seine Member auf jeder Funktion im Hauptverzeichnis ändern/lesen zu können.Definieren von globalen struct Array von Zeigern

Im Blick auf Probleme mit diesem Problem und ich bin nicht sicher, wie und wo man jedes Ding zu definieren. Ich habe versucht, diesen nächsten Code:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <ctype.h> 

typedef struct complext 
{ 
    double real; 
    double img; 
} complex; 
complex* vars; 

int main() 
{ 
    int i; 
    vars = malloc(6 * sizeof(vars)); 
    for (i = 0; i < 6;) 
     vars[i]->real = 0; 
} 

Im einen Fehler bekommen, wenn im Versuch, Vars zu den acces [i]. „Anfrage für Mitglied‚echt‘im etwas keine Struktur oder eine Vereinigung. Dank!

+0

Sie sollten den Rückgabewert von 'malloc' typisieren. Also: 'vars = (var *) malloc (6 * sizeof (* vars));'. Außerdem sollten Sie die letzte Zeile in 'vars [i] .real = 0;' ändern. –

+0

Nein, nicht werfen, wenn es nicht notwendig ist. Sorry, mein Kommentar war eine Antwort auf Shiva's. – ncarrier

+0

Versucht, dass aber immer noch der gleiche Fehler auftritt. – Yakalolo

Antwort

0

Vars vom Typ struct complext *, aber Vars [i] ist vom Typ struct complext, so dass Sie nur vars[i].real verwenden müssen statt vars[i]->real

.
2

es gibt 3 Fehler in Ihrem Code
1. vars[i]->realvars[i].real sein sollte. Pls die Datentypen zu ehren Sie haben vars definiert einen globalen Zeiger auf die complex Struktur sein. es als Array Verwendung zu definieren : complex vars[6]; - -> Lesen Sie @ José Fonte ‚s ans
2. malloc kehrt ein void * warf es zu (complex*) -> habe ich gelernt, dies in Ordnung sein sollte (siehe Kommentare von @Stargateur veröffentlicht)
3. Die for Schlaufe am Ende hat keine Inc-Anweisung für i daher läuft es für immer
4. Die malloc reserviert nur 6 Zeiger Wert des Speichers (6 * sizeof (int)), da vars ist ein Zeiger des Typs komplex. sizeof(vars) sollte sizeof(complex) sein -> @xing this out

wies
#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
#include<ctype.h> 

typedef struct complext { 
double real; 
double img; 
}complex; 
complex *vars; 

int main() 
{ 
int i; 
vars= (complex*)malloc(6*sizeof(complex)); 
for(i=0;i<6; i++) 
vars[i].real=0; 
} 
+1

Ich stimme 1 und 3 zu, nicht mit 2. Und wie Shiva entdeckt hat, sollte 'sizeof (* vars)' anstelle von 'sizeof (vars)' – ncarrier

+2

verwendet werden 2. [Werde ich das Ergebnis von malloc?] (https://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc) – Stargateur

+0

@Stargateur: Danke für das Zeigen !! – Zakir

1

Ihre Misch Zeiger mit Arrays. Es als ein Array (als ein Zeiger bereits von @Zakir getan) tun:

#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
#include<ctype.h> 

typedef struct complext { 
    double real; 
    double img; 
}complex; 
complex vars[6]; 

int main() 
{ 
    int i; 

    for(i=0;i<6;i++) 
    vars[i].real=0; 
}