如何使用结构指针分配结构成员数组?

时间:2020-01-15 21:56:53

标签: c arrays struct variable-assignment assign

如何使用结构指针分配an array wrapped into a struct

我知道这种语法:

size_t initArrayList[] = {1,1,1};
memcpy(pStruct->sizet, initArrayList, sizeof(pStruct->sizet));

是否可以使用与以下类似的语法:

Stru = (struct myStruct) {.sizet = {1,1,1}};

使用指针?

非常感谢您对(struct myStruct) {.sizet = {1,1,1}}的功能进行详细说明。

struct myStruct {
  size_t sizet[3];
} ;

void struInit(struct myStruct * pStruct) ;

int main()
{
struct myStruct Stru;

    struInit(&Stru);

          if (Stru.sizet[1]==1)
              printf("\nStru.sizet[1]==1");

    return 0;
}

void struInit(struct myStruct * pStruct ) {

// I know this syntax
//   size_t initArrayList[] = {1,1,1};
//   memcpy(pStruct->sizet, initArrayList, sizeof(pStruct->sizet));

}

1 个答案:

答案 0 :(得分:1)

使用临时数组(就像您的memcpy函数中注释的那样)调用struInit

memcpy(pStruct->sizet, initArrayList, sizeof(pStruct->sizet));

或使用复合文字将其分配给指向结构(注意使用*取消引用运算符)

*pStruct = (struct myStruct){.sizet={1,1,1}};

甚至是传统的for循环,逐个元素地复制,都可以满足您的要求。

或者,如果您不能依赖于指定的初始值设定项或复合文字, 都是自C99以来才标准化的功能,您可以 使用等效的C89方式,不使用它们:

struct myStruct tmp = {{1,1,1}};
*pStruct = tmp;

非常感谢您对(struct myStruct) {.sizet = {1,1,1}}的功能进行详细说明。

C99的相关部分描述了指定的初始化程序和 复合文字是 6.7.8初始化 6.5.2.5复合 文字

简短的答案是,如果在struInit函数中使用它 构造一个类型为struct myStruct的本地未命名对象, 将其成员sizet初始化为{1,1,1},这反过来就是语法 对于数组元素初始化,为其分配一个1值 元素[0][1][2]的顺序完全相同。