I want to set a global reference of an int array, in C language, but I want to initialize it inside main function (actually the user is going to declare its size). Anyone knows how is this done?
Thanks in advance!
Declare a pointer to an int as a global variable and initialize it in main using malloc.
/* outside any function, so it's a global variable: */
int *array;
size_t array_size;
/* inside main(): */
array_size = user_defined_size;
array = malloc( sizeof(int)*array_size);
if ( array == NULL) {
/* exit - memory allocation failed. */
}
/* do stuff with array */
free(array);
If you need to access the global variable from another module (source file), declare it there again using
extern int *array;
extern size_t array_size;
or, preferably, declare them extern in a header file included in any source file that uses the array, including the source where they are defined (to ensure type consistency).
array) is defined as well as in the source files that use the array. That ensures (or does the most that can be done to ensure) that the definitions and uses of the array and its size are consistent.
stdin,stdoutandstderrare global variables, and it would be a confounded nuisance if they weren't. OTOH,errnois global and manages to present problems, though the standard has now partially neutralized the worst of them.