Ich versuche, Verweis eine (verschachtelte) Struktur in C.C vorwärtsgerichtete Strukturen - 1) muss mit einem Zeiger sein? 2) muss initialisiert werden?
Das bedeutet, ich habe eine Struktur und darin verweise ich auf eine andere Struktur, die später deklariert wird.
Wenn ich die verschachtelte Struktur als Zeiger deklariere und mit Werten initialisiere, funktioniert es.
Der folgende Code funktioniert:
#include <stdio.h>
struct computer{
double cost;
int year;
char cpu_type[16];
struct cpu_speed *sp; //this is the question (1)
};
struct cpu_speed{
int num;
char type[16];
};
typedef struct computer SC;
typedef struct cpu_speed SS;
void DataR(SC *s);
void DataP(SC *s);
int main(){
// this is question (2)
SS speed = {4,"giga"};
SC model[2] = {
{ 0,1990, "intel", &speed},
{ 0,1990, "intel", &speed}
};
int i;
for(i=0;i<2;i++) {
printf("computer no. %d \n", i+1);
DataR(&model[i]);
}
printf("here's what you entered: \n");
for(i=0;i<2;i++) {
printf("computer no. %d \n", i+1);
DataP(&model[i]);
}
return 0;
}
void DataR(SC *s){
printf("the cost of your computer: ");
scanf("%lf", &s->cost);
printf("the year of your computer: ");
scanf("%d", &s->year);
printf("the type of cpu inside your computer: ");
scanf("%s", s->cpu_type);
printf("the speed of the cpu: ");
scanf("%d %s", &(s->sp->num), s->sp->type);
}
void DataP(SC *s){
printf("the cost: %.2lf\n",s->cost);
printf("the year: %d\n",s->year);
printf("the cpu type: %s\n",s->cpu_type);
printf("the cpu speed: %d %s\n",s->sp->num, s->sp->type);
}
Wenn ich die verschachtelte Struktur (dh struct cpu_speed{...};
), bevor die Mutter erklären struct, ich brauche keinen Zeiger zu verwenden, und ich auch nicht brauchen (?) initialisieren.
Bedeutung:
(1) kann ich struct cpu_speed speed;
statt struct cpu_speed *sp;
verwenden. (2) Ich muss den Strukturvariablen keine initialisierten Werte geben.
Meine Fragen noch einmal - in Vorwärtsreferenzierung Struktur - (1) müssen Sie es mit einem Zeiger deklarieren? und (2) müssen Sie die Werte initialisieren?
Denken Sie einfach: Wie würde ein rekursives 'struct' funktionieren? (Während es verwandt ist, geht es hier nicht um Verschachtelung) – Olaf