如何在c中为数组[]指定指针?

时间:2018-06-11 16:31:30

标签: c pointers

如何在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;
}

3 个答案:

答案 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)

数组不是指针,就是全部。