如何在 c 中将指针分配给数组? 在这个例子中,我希望 some.x 的值存储在 vals 中
typedef struct s
{
int x[];
}s;
int main()
{
int* vals = malloc(sizeof(int) * 10);
for (int i = 0; i < 10; i++)
vals[i] = i + 10;
s some;
//some.x = vals?
return 0;
}
最佳答案
假设您想要分配一个具有灵活数组成员的结构,而不是分配一个指向数组的指针(正如其他人所说 - 您不能那样做)
要使用灵活的数组成员,您需要分配结构以及数组的内存量。
typedef struct s
{
int x[];
}s;
int main()
{
s *some = malloc( sizeof( *some ) + ( 10 * sizeof( int ) ) );
for ( int i = 0; i < 10; i++ )
some->x[i] = i + 10;
return 0;
}
请注意,您不能将 sizeof( struct ... )
排除在分配之外 - 结构的存在不能保证为零,即使灵活数组成员是唯一的字段结构。
正如@chux 在评论中指出的那样,这与使用变量而不是类型作为 sizeof()
参数更一致:
s *some = malloc( sizeof( *some ) + ( 10 * sizeof( some->x[0] ) ) );
关于c - 如何在 c 中分配指向数组 [ ] 的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50802302/