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];
?