Home > Software design >  Initialize the size of global array
Initialize the size of global array

Time:06-30

I need to put the output of arr in global array because I need to use the array in main function. How can I initialize the array in global and I don't know the size of it ? any idea please?

globarr[]; // how to set the size here?

int *suma(int *output, int *arr)  
{  
    *output = 0;                       
    for (int i = 0; i < 100; i  ) {  
        arr[i] = i;
        *output  = arr[i]; 
    } 
    return arr;  
}

void prose(){
    int *by;  
    int output;
    int arr[100];                
    by = suma(&output, arr);
    for (ont i=0; i<output; i  ) {
        globarr[i] = n[i];
    }  
}

void main()
{
    prose(); 
    // here I need to use the values of globarr
}

CodePudding user response:

I need to put the output of arr in global array

The only reason you might need to do that would be that some external authority you are bound to obey placed such an arbitrary, unnatural requirement.

It is possible to write conforming C code for any task, using only the C standard library, that does not rely on any global variables other than those few provided by the standard library itself.

because I need to use the array in main function. How can I initialize the array in global and I don't know the size of it ?

You cannot. The size of an array declared at file scope must be an integer constant expression, which means, among other things, that it must be computable at compile time.

any idea please?

You have two main alternatives:

  1. Choose an upper bound on the size your program will support, and declare an array large enough for that. Make the program abort if otherwise it would try to use more elements of the array than are available.

  2. Use a dynamically allocated space instead of a (declared) array.

CodePudding user response:

Use function parameters and return values not global variables

long long suma(int **arr, size_t size)  
{  
    long long output = 0;                       
    *arr = malloc(size * sizeof(**arr));
    if(*arr)
    {
        for (size_t i = 0; i < size; i  )  
        {  
            (*arr)[i] = i;
            output  = (*arr)[i]; 
        }
    } 
    return output;  
}

#define SIZE 100

void main(void)
{
    int *array;
    long long output = suma(&array, SIZE);

    printf("Sum of elements = %lld\n", output);

    /* you can use the array */

    if(array)
    {
        for(size_t i = 0; i < SIZE; i  )
        {
            printf("[%3zu]=%d%s", i, array[i], ((i   1) % 10) ? ",\t" : "\n");
        }
    }
    free(array);
}

https://godbolt.org/z/EPdxfPzoq

Output:

Sum of elements = 4950
[  0]=0,    [  1]=1,    [  2]=2,    [  3]=3,    [  4]=4,    [  5]=5,    [  6]=6,    [  7]=7,    [  8]=8,    [  9]=9
[ 10]=10,   [ 11]=11,   [ 12]=12,   [ 13]=13,   [ 14]=14,   [ 15]=15,   [ 16]=16,   [ 17]=17,   [ 18]=18,   [ 19]=19
[ 20]=20,   [ 21]=21,   [ 22]=22,   [ 23]=23,   [ 24]=24,   [ 25]=25,   [ 26]=26,   [ 27]=27,   [ 28]=28,   [ 29]=29
[ 30]=30,   [ 31]=31,   [ 32]=32,   [ 33]=33,   [ 34]=34,   [ 35]=35,   [ 36]=36,   [ 37]=37,   [ 38]=38,   [ 39]=39
[ 40]=40,   [ 41]=41,   [ 42]=42,   [ 43]=43,   [ 44]=44,   [ 45]=45,   [ 46]=46,   [ 47]=47,   [ 48]=48,   [ 49]=49
[ 50]=50,   [ 51]=51,   [ 52]=52,   [ 53]=53,   [ 54]=54,   [ 55]=55,   [ 56]=56,   [ 57]=57,   [ 58]=58,   [ 59]=59
[ 60]=60,   [ 61]=61,   [ 62]=62,   [ 63]=63,   [ 64]=64,   [ 65]=65,   [ 66]=66,   [ 67]=67,   [ 68]=68,   [ 69]=69
[ 70]=70,   [ 71]=71,   [ 72]=72,   [ 73]=73,   [ 74]=74,   [ 75]=75,   [ 76]=76,   [ 77]=77,   [ 78]=78,   [ 79]=79
[ 80]=80,   [ 81]=81,   [ 82]=82,   [ 83]=83,   [ 84]=84,   [ 85]=85,   [ 86]=86,   [ 87]=87,   [ 88]=88,   [ 89]=89
[ 90]=90,   [ 91]=91,   [ 92]=92,   [ 93]=93,   [ 94]=94,   [ 95]=95,   [ 96]=96,   [ 97]=97,   [ 98]=98,   [ 99]=99
  • Related