c - 如何在 c 中分配指向数组 [ ] 的指针?

标签 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;
}

最佳答案

假设您想要分配一个具有灵活数组成员的结构,而不是分配一个指向数组的指针(正如其他人所说 - 您不能那样做)

要使用灵活的数组成员,您需要分配结构以及数组的内存量。

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/

相关文章:

c++ - C++ 的 Python 解释器

C++ 返回数组并将其分配给变量

带指针的C程序

c - 遇到 "\n"和 scanf 问题

c - 我想知道当 if(i%2) 它检查什么来继续时会发生什么。它错过了 == 但它打印出的总和为 20?为什么?

c - 如何访问分配给不同进程的内存?

c - 无法在游戏板上打印 token

c++ - 从类调用函数时箭头 '->' 分隔符崩溃

c - 为什么我们需要使用双指针来访问二维数组?

c - 从文件中的特定位置读取特定数据(C)