如何使用结构指针分配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));
}
要么使用临时数组调用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]
的确切顺序。