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

问题描述 投票:0回答:1

如何使用结构指针分配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));

}

c arrays struct variable-assignment assign
1个回答
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]的确切顺序。

© www.soinside.com 2019 - 2024. All rights reserved.