Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 错误:“->”的类型参数无效-打印也是结构的结构字段的地址_C_Struct_Printf - Fatal编程技术网

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;
}