如何使用结构指针分配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));
}
答案 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]
的顺序完全相同。