如何在 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] ) ) );
我是一名优秀的程序员,十分优秀!