繁体   English   中英

访问传递给函数的结构成员变量

[英]Accessing struct member variables passed into function

我在自己定义的结构中有一个名为s的结构状态变量,如下所示:

struct myStruct {
  struct stat s;
};

并且我想找到两个myStruct对象之间的st_mode之间的差异,因此我的逻辑是指向该结构并使用“。”。 为其成员变量。

int func(const void *a, const void *b)
{ 
  return a->s.st_mode - b->s.st_mode;
}

但是,此实现存在一些问题:

error: request for member 's' in something not a structure or union
warning: dereferencing 'void *' pointer [enabled by default] 

我该怎么做才能纠正这个问题?

函数的参数类型为const void*类型,而不是struct myStruct*类型。

您是否确定它们实际上是struct myStruct的指针? 如果是这样,您可以进行转换:

return ((struct myStruct*)a)->s.st_mode - ((struct myStruct*)b)->s.st_mode

但是将您的函数重新定义为只接受正确类型的指针是更安全的:

int func(const struct myStruct* a, const struct myStruct* b)

然后其余部分保持不变。

应该将您的函数声明为采用指向struct myStruct指针,否则编译器无法推断ab的类型。

int func(const struct myStruct *a, const struct myStruct *b)
{ 
  return a->s.st_mode - b->s.st_mode;
}

或者,您可以使用强制转换:

int func(const void *a, const void *b)
{ 
  return (const struct myStruct*)a->s.st_mode - (const struct myStruct*)b->s.st_mode;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM