Passerer en verdi med struct typen til en funksjon i C

stemmer
1
typedef struct {
        nat id;
        char *data;
        } element_struct;

typedef element_struct * element;

void push(element e, queue s) {
        nat lt = s->length;
        if (lt == max_length - 1) {
                printf(Error in push: Queue is full.\n);
                return;
        }
        else {
                s->contents[lt] = e;
                s->length = lt + 1;
        }
}
int main () {
         push(something_of_type_element, s);
}

Hvordan skulle jeg gå om formatering something_of_type_element?

Takk

Merknader: nat er den samme som int

Publisert på 13/11/2008 klokken 02:34
kilden bruker
På andre språk...                            


2 svar

stemmer
3

Hva med:

element elem = malloc(sizeof(element_struct));
if (elem == NULL) {
    /* Handle error. */
}

elem->id = something;
elem->data = something_else;

push(elem, s);

Legg merke til at det er massevis av minnehåndtering mangler her ...

Svarte 13/11/2008 kl. 02:44
kilden bruker

stemmer
1

Som dette:

element_struct foo = { 1, "bar" };
push(&foo, s);

Hvis du har en C99 kompilatoren kan du gjøre dette:

element_struct foo = {
    .id = 1,
    .data = "bar"
};
push(&foo, s);

Legg merke til at dataene i strukturen må kopieres hvis det er behov for å leve lenger enn omfanget der det ble definert. Ellers kan minnet bli tildelt på haugen med malloc (se nedenfor), eller en global eller statisk variabel kunne brukes.

element_struct foo = malloc(sizeof (element_struct));

foo.id = 1;
foo.data = "bar";
push(foo, s);
Svarte 13/11/2008 kl. 02:44
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more