如何在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;
}
答案 0 :(得分:5)
假设您要分配一个具有灵活数组成员的结构,而不是分配一个指向数组的指针(正如其他人所说 - 你不能这样做)
要使用灵活的阵列成员,您需要为阵列分配结构和一定量的内存。
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] ) ) );
答案 1 :(得分:1)
你无法做你想做的事。它超出了C11标准n1570。
阵列确实会衰减成指针,但不会反过来。您无法分配给数组。
所以系统地使用 指针。
你的代码没有任何意义:想想sizeof
涉及的数据!
了解flexible array members。您将使用指向包含它们的struct
的指针。
答案 2 :(得分:1)
数组不是指针,就是全部。