从命令行定义全局数组的大小

ubi*_*con 3 c semaphore pthreads global-variables command-line-arguments

我正在进行一项任务,我需要使用pthreads或信号量来同步一些访问某些共享资源的进程.由于我们在类中的所有示例都使用全局变量作为我计划执行相同操作的共享资源,但我希望将共享资源的值基于命令行参数. 我知道如何在main方法中使用命令行参数,但是如何根据命令行参数定义全局数组(共享资源)的大小?

更新:

Wallyk的答案似乎会起作用,但我仍然对某些细节更加模糊.查看示例和评论......

#include <stdio.h>

void print_array(void);

int *array;
int count;

int main(int argc, char **argv){
    int count = atoi(argv[1]);
    array = malloc(count *sizeof(array[0]));
    int i;
    for(i = 0; i < count; i++){ /*is there anyway I can get the size of my array without using an additional variable like count?*/
        array[i] = i;
    }
    print_array();
    return 0;
}

void print_array(){
    int i;
    for(i = 0; i < count; i++){
        printf("current count is %d\n", array[i]);
    }
}
Run Code Online (Sandbox Code Playgroud)

wal*_*lyk 9

你不能做一个静态动态声明,如:

int globalarray[n];
Run Code Online (Sandbox Code Playgroud)

其中n是运行时设置的变量.这不起作用,因为在程序开始运行之前初始化了数组.

一个很好的选择是使用指向动态内存的指针:

int *globalarray;

int main (int argc, char **argv)
{
...
   int elements = atoi (argv [j]);  // parse out the program argument array size
   globalarray = malloc (elements * sizeof (globalarray[0]));
}
Run Code Online (Sandbox Code Playgroud)