C 地址可以打字吗?

C 地址可以打字吗?,c,C,我想要结构的地址,但在我的代码中,我只能返回第一个成员的值的地址。我可以将值的地址键入结构分类器吗?如果是,如何输入和转换?例如,我的函数只返回下面提到的struct中value的地址。我可以将此地址转换为分类器吗 struct classifier { int value; struct packet_filter pktFltr; struct classifier *next; } 该标准规定,如果您正确地强制转换了

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

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

该标准规定,如果您正确地强制转换了结构
分类器
的地址,则该结构的地址与第一个成员
的地址相同

也就是说,以下是等效的,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;

该标准规定,如果您正确地强制转换了结构
分类器
的地址,则该结构的地址与第一个成员
的地址相同

也就是说,以下是等效的,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;

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

同时保证struct的第一个成员将具有与struct本身相同的地址(因为在开始时不允许填充),将
int*函数()
的返回值强制转换为
某些结构*
不是一个好做法-如果后来有人决定修改函数以返回某些malloc'ed int的地址,该怎么办?

如果您有一个
结构分类器类型的对象
,该对象的地址类型为
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;
}
#包括
结构分类器{
int值;
结构包过滤器pktFltr;
结构分类器*next;
};
void foo(结构分类器*bar){
printf(“值为%d\n”,条->值);
}
内部主(空){
结构分类器示例={42};/*值为42,其他所有值均为0*/
foo(&example);/*好,`&example`的类型正确*/
返回0;
}

如果您的对象类型为
结构分类器
,则该对象的地址类型为
结构分类器*
。没有什么特别的

#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;
}
#包括
结构分类器{
int值;
结构包过滤器pktFltr;
结构分类器*next;
};
void foo(结构分类器*bar){
printf(“值为%d\n”,条->值);
}
内部主(空){
结构分类器示例={42};/*值为42,其他所有值均为0*/
foo(&example);/*好,`&example`的类型正确*/
返回0;
}

请重新表述您的问题,如果您想获得next的值或它的内存地址,这是不可理解的。请尝试改进您的标点符号好吗?谢谢,我编辑了这个问题。请检查这是否是你想要问的。@Naveen:是的,这是我想要的。请重新表述你的问题,如果你想得到下一个值或它的内存地址,这是不可理解的。你能尝试改进你的标点符号吗?谢谢,我编辑了这个问题。请检查这是否是您想要问的。@Naveen:是的,这是我在代码中想要的,我已经完成了这个返回(&ptr->keys[pos].value);但是函数的返回类型是struct-classifier*search(int-key),我得到一个错误:“search”的类型冲突。如何将强制转换int地址键入结构分类器地址,因为我需要结构分类器地址only@asir:如答案所述,您可以使用
return((struct chassifier*)(&ptr->keys[pos].value);
BTW为什么不使用
return&ptr->keys[pos];
?在我的代码中,我已经完成了这个返回(&ptr->keys[pos].value);但是函数的返回类型是struct-classifier*search(int-key),我得到一个错误:“search”的类型冲突。如何将int-address类型转换为struct-classifier-address,因为我需要struct-classifier-addressonly@asir:如回答中所述,您可以使用
return((struct chassifier*)(&ptr->keys[pos].value)
顺便说一句,你为什么不做
返回&ptr->按键[pos];