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

C 从命令行定义全局数组的大小,c,pthreads,global-variables,command-line-arguments,semaphore,C,Pthreads,Global Variables,Command Line Arguments,Semaphore,我正在执行一个任务,需要使用pthread或信号量来同步访问某些共享资源的一些进程。由于类中的所有示例都使用全局变量作为共享资源,因此我计划执行相同的操作,但我希望将共享资源的值基于命令行参数我知道如何在main方法中使用命令行参数,但如何基于命令行参数定义全局数组(共享资源)的大小? 更新: 沃利克的回答似乎会奏效,但我对一些更精细的细节仍不清楚。请参见示例和注释 #include <stdio.h> void print_array(void); int *array; in

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

更新:

沃利克的回答似乎会奏效,但我对一些更精细的细节仍不清楚。请参见示例和注释

#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]);
    }
}
#包括
作废打印_数组(作废);
int*数组;
整数计数;
int main(int argc,字符**argv){
int count=atoi(argv[1]);
数组=malloc(count*sizeof(数组[0]);
int i;
对于(i=0;i
您不能执行如下静态-动态声明:

int globalarray[n];
其中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]));
}
指向'd数组的全局指针是一种可能的解决方案。
因此,您可以根据命令行参数malloc所需大小的数组,并使指向该数组的指针对所有pthread可见。

我在指针方面仍然有点弱。我明白您在这里所做的,但它带来了一些其他问题,比如如何填充这个全局数组,以及如何在需要时找到数组的大小(
sizeof(array)/sizeof(int)
似乎不起作用)。请参阅我更新的问题。@typoking:您将元素数存储在另一个类型为
size\t
的变量中,并在需要时进行检查。@typoknig:请记住数组和指针有很多共同点,因此
globalarray[0]=
将起作用。或
intj;对于(j=0;j确保元素的数量也是全局的,这样数组的所有用户都可以轻松确定其大小。你的更新实际上是另一个问题,所以你应该继续选择Wallyk的答案。不使用其他变量的最接近方法是将
int*数组
int计数
存储在结构中。这实际上只是两个变量,但它们以一种更明显的方式联系在一起,你也可以将该结构用于其他事情。@当然,这不是另一个问题,我只是想明确给出的答案。。。最后我总是选择一个答案:)