我想要结构的地址,但在我的代码中我只能返回第一个成员的值的地址。我可以将值的地址类型转换为struct分类器吗?如果是,如何输入它呢?例如,我的函数只返回下面提到的value
中struct
的地址我可以将此地址转换为classifier
吗?
struct classifier
{
int value;
struct packet_filter pktFltr;
struct classifier *next;
}
答案 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;
}