c - 如何将结构数组的属性作为参数发送给 C 中的函数?

标签 c arrays struct

所以这是我的问题。

我有一个具有一些属性的结构:

struct foo {
  const uint8_t propertyA;
  int propertyB;
  const int propertyC;
  typeX propertyD;
  typeY propertyE;
};

然后我创建一个这个结构的数组,因为我必须表示对象 foo 的多个实例:

const int foosQuantity = 8;
struct foo foos[foosQuantity] = 
   {{ .propertyA=0b11001100, .propertyB=0, .propertyC=140, ...},
   { .propertyA=0b11001000, .propertyB=0, .propertyC=150 ...},  

          //*** foosQuantity-3 MORE TIMES ***//

   { .propertyA=0b11001000, .propertyB=0, .propertyC=150 ...}}

到目前为止,一切似乎都正常。但是,我还没有想出如何将一种属性的数组发送给函数。例如,我将此函数编写在一个外部库中,该库采用一组属性 A:

void myFunc(const uint8_t *propertyAs, sizeArray){

    //*** DO STUFF ***//

}

而且我想直接发送我的结构的属性,而不必使用遍历结构数组并复制元素的 for 循环。

int main(){

  //*** STUFF ***//

  myFunc(foos.propertyA, foosQuantity); 

  //*** MORE STUFF ***//

  return 0;
}

这可能吗?

最佳答案

如果整个结构数组已经存在于你的程序内存中,你不会比仅仅传递指向数组开头的指针、数组的长度(以元素为单位)和迭代 propertyA 成员更高效数组的:

void bar(struct foo *p, size_t len)
{
    size_t i;
    for(i = 0; i < len; i++)
    {
        dosomething(p[i].propertyA);
    }
}

如果您被分配的规范限制为只允许将 propertyA 数组(即 uint8_t )传递给您的函数,您必须将它们复制出 struct foo 数组;没有办法解决这个问题。

关于c - 如何将结构数组的属性作为参数发送给 C 中的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53504694/

相关文章:

go - 为什么接受自定义结构来代替错误?

C: 如何声明返回非静态字符串的静态函数?

c++ - 在运行时本地启用/禁用 OpenMP

javascript - 如何找到最长公共(public)子数组

c++ - 将数组的所有点设置为 0 对重新分配动态内存有不同的影响

go - 将数据添加到结构中的 interface{}

c - '<' 在 if 语句中不起作用

objective-c - 将 Objective-C 与 C 和代码组织混合

c - 在 C 中使用递归反转字符数组

c - 结构函数指针参数?