可以解决吗?

时间:2011-03-18 09:56:35

标签: c

我想要结构的地址,但在我的代码中我只能返回第一个成员的值的地址。我可以将值的地址类型转换为struct分类器吗?如果是,如何输入它呢?例如,我的函数只返回下面提到的valuestruct的地址我可以将此地址转换为classifier吗?

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

3 个答案:

答案 0 :(得分:1)

标准声明结构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;

答案 1 :(得分:0)

虽然可以保证struct的第一个成员与struct本身具有相同的地址(因为开头不允许填充),但将int* function()的返回值强制转换为some_struct*是不是一个好的做法 - 如果有人后来决定修改函数以返回某些malloc'ed int的地址呢?

答案 2 :(得分:0)

如果您有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;
}