Передача значения с типом структуры в функцию в C - PullRequest
1 голос
/ 13 ноября 2008
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);
}

Как мне отформатировать "something_of_type_element"?

Спасибо

Примечания: nat - это то же самое, что и int

Ответы [ 2 ]

3 голосов
/ 13 ноября 2008

Как насчет:

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

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

push(elem, s);

Обратите внимание, что здесь не хватает управления памятью ...

1 голос
/ 13 ноября 2008

Как это:

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

Если у вас есть компилятор C99, вы можете сделать это:

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

Обратите внимание, что данные в структуре должны быть скопированы, если они должны жить дольше, чем область, в которой они были определены. В противном случае память может быть выделена в куче с помощью malloc (см. Ниже), или может использоваться глобальная или статическая переменная.

element_struct foo = malloc(sizeof (element_struct));

foo.id = 1;
foo.data = "bar";
push(foo, s);
...