加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 09:22:22 所属栏目:百科 来源:网络整理
导读:所以这是我的问题. 我有一个具有一些属性的结构: struct foo { const uint8_t propertyA; int propertyB; const int propertyC; typeX propertyD; typeY propertyE;}; 然后我创建了这个结构的数组,因为我必须代表对象foo的多个实例: const int foosQuantit
所以这是我的问题.

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

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,.propertyC=150 ...},//*** foosQuantity-3 MORE TIMES ***//

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

到现在为止,一切似乎都有效.但是,我还没有想过如何将一种类型的属性数组发送到函数.例如,我把这个函数写在一个extern库中,它带有一个属性数组A:

void myFunc(const uint8_t *propertyAs,sizeArray){

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

}

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

int main(){

  //*** STUFF ***//

  myFunc(foos.propertyA,foosQuantity); 

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

  return 0;
}

这可能吗?

解决方法

如果整个struct数组已经存在于程序的内存中,那么你不会比仅仅将指针传递给数组的开头,数组的长度(在元素中)以及迭代在数组的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数组中;没有办法解决这个问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读