C 错误:“->”的类型参数无效-打印也是结构的结构字段的地址
我有一个这样的结构:C 错误:“->”的类型参数无效-打印也是结构的结构字段的地址,c,struct,printf,C,Struct,Printf,我有一个这样的结构: struct my_struct { struct_a a; struct_b b; }; 我正在尝试打印我的结构类型变量的地址,以及它的字段a和b的地址,这些字段也是结构: void some_function(my_struct *my) { //.... printf("my addr: %p - a addr: %p - b addr: %p", my, (void *) &my->a,
struct my_struct {
struct_a a;
struct_b b;
};
我正在尝试打印我的结构类型变量的地址,以及它的字段a和b的地址,这些字段也是结构:
void some_function(my_struct *my) {
//....
printf("my addr: %p - a addr: %p - b addr: %p", my, (void *) &my->a,
(void *) &my->b);
}
int main() {
my_struct my; //my is initialized in a function...
//then, it is passed to some_function(...) bellow...
printf("my addr: %p - a addr: %p - b addr: %p", my, (void *) &my->a,
(void *) &my->b);
some_function(&my);
return 0;
}
我得到以下错误:
错误:“->”的无效类型参数具有“struct my_struct”
我的理解有什么问题?问题实际上在于主函数中my是struct my_struct的一个实例,因此对其使用->运算符是无效的。将printf调用更改为use。相反:
还请注意,main必须返回int。my不是指针,因此您可以使用访问它的元素。而不是->。@ChristianGibbons my是一个指针……哦,等等。这里有两个我。@DaltonCézane你能提供一个答案吗?我对代码进行了一些调整,以便能够编译它,但我不能立即重新编译:并提供MCVE谢谢你的回答。我的代码中有一个错误:某些函数中不存在该局部变量。我编辑了我的问题,修正了这个。但是我的代码和你的代码一样,除了void*my,并且仍然在&my->a和&my->b部分中给出错误…@DaltonCézane我编译的函数。你确定没有在函数的其他地方定义my吗?你是对的。我将把你的答案记为答案。当my没有用作指针时,您能插入一段代码吗?在这种情况下,我们必须使用&my.a和&my.b。。。这是我的问题。。。我正在调试一个代码,我在一个函数中放置了一个printf,该函数接收我的_struct*my,并且在主函数中使用了相同的printf,在主函数中声明了my。。。所以,我不得不改变->到。在主函数中。这不会回答问题的当前版本。通常情况下,问题必须回滚,因为最后一次编辑没有上下文。但是问题是,如果没有编辑,这个问题缺少一个答案,这个答案也没有回答以前的版本,而是一些非常旧的版本,由于使用不同类型的重新声明,这些版本甚至不应该编译。所以我留下问题,请您编辑答案以匹配当前版本@道尔顿·塞赞:如果编辑留下的答案没有上下文,请不要编辑您的问题!这是违反网站规则的。@同样,我也编辑了这个问题,把缺少的部分放在这里:主功能。因此,现在问题已经很清楚了,正如答案中的编辑一样,解决方案也很清楚了。我的错误是对问题的第一个描述。我打字很快,没有注意MCVE。正如我所说,我很抱歉。。。但我修正了这个问题,添加了缺失的部分,我确信现在它确实有意义。
int main() {
my_struct my; //my is initialized in a function...
//then, it is passed to some_function(...) bellow...
printf("my addr: %p - a addr: %p - b addr: %p", (void *)&my, (void *) &my.a,
(void *) &my.b);
some_function(&my);
return 0;
}