адрес может быть напечатан? - PullRequest
1 голос
/ 18 марта 2011

Я хочу адрес структуры, но в моем коде я могу только вернуть адрес значения первому члену. Могу ли я ввести адрес значения в классификатор структуры? Если да, как печатать? Например, моя функция возвращает только адрес value в указанном ниже struct. Могу ли я привести этот адрес к classifier?

    struct classifier
    {
        int value;
        struct packet_filter pktFltr;
        struct classifier *next;
    }

Ответы [ 3 ]

1 голос
/ 18 марта 2011

Стандарт гласит, что адрес структуры classifier совпадает с адресом ее первого члена value при условии, что вы приведете его правильно.

То есть следующее эквивалентно, p указывает на тот же адрес:

int *p;
struct classifier c;

p = (int*)c;
p = &c.value; 

Это означает, что

(int*) c == &c.value

А в вашем случае, если я правильно понимаю, вы захотите:

c = (struct chassifier *) adress_of_my_first_member_in_struct_classifier;
0 голосов
/ 18 марта 2011

Если у вас есть объект типа struct classifier, адрес этого объекта имеет тип struct classifier *.В этом нет ничего особенного ...

#include <stdio.h>

struct classifier {
    int value;
    struct packet_filter pktFltr;
    struct classifier *next;
};

void foo(struct classifier *bar) {
    printf("value is %d\n", bar->value);
}

int main(void) {
    struct classifier example = {42}; /* value is 42, everything else is 0  */
    foo(&example); /* ok, `&example` is of the correct type */
    return 0;
}
0 голосов
/ 18 марта 2011

Хотя гарантируется, что первый член структуры будет иметь тот же адрес, что и сама структура (так как заполнение не разрешено в начале), приведение возвращаемого значения от int* function() к some_struct* не является хорошей практикой- что, если кто-то позже решит изменить функцию, чтобы вместо нее возвращать адрес некоторого int из malloc?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...