在main外部的C中定义一个数组,并在main中指定它的大小

时间:2011-11-06 06:50:00

标签: c arrays multithreading

我想在main函数外部定义一个数组,以便所有线程共享它,而不仅仅是主线程。当用户运行程序时,他的参数应该是数组的大小。我怎样才能在C中实现这个目标?

3 个答案:

答案 0 :(得分:3)

你不能使用真正的数组。您可以使用指针执行此操作:

int *p;

int main(int argc, char *argv[])
{
    size_t x;
    if (argc < 2)
        return;

    size_t x = strtoul(argv[1], NULL, 10);
    p = malloc(x * sizeof *p);    

    return 0;
}

答案 1 :(得分:2)

因为在声明数组时你不知道数组的长度,所以它必须是一个动态分配的数组。

(注意即使你只想访问main()中的数组也是如此,尽管许多编译器都有允许int a [n]的扩展;)

int * myarray;
int myarray_count;
int main(int argc, const char * const * argv)
{
    myarray_count = atoi(argv[1]);
    myarray = malloc(myarray_count * (sizeof myarray[0]));
    // ...
    return 0;
}

由于myarray不能是静态数组,因此sizeof myarray不会返回已分配数组的大小,因此您可能希望将计数保持在它旁边。

答案 2 :(得分:0)

int *a;
int a_c;
int main(int argc, char *argv[])
{
     int i=0;

    if (argc < 2)
        return;
    a_c= atoi(argv[1]);
    a= malloc(a_c* (sizeof(int)));
    // ...
    for(i=0;i<a_c;i++)
    {
    printf("\n %d",a[i]);
    }   

return 0;
}