Connect with us

confuse on Size of array in c program

Discussion in 'Microcontrollers, Programming and IoT' started by vead, Jan 4, 2018.

Scroll to continue with content
  1. vead

    vead

    473
    14
    Nov 27, 2011
    I am confuse on size of array declaration

    Code:
    #include<stdio.h>
    int main (void)
    {
      int i, array[4], size;
       
      /* print size of array on screen */
       printf ("size of array : ");
      /*get size of array from user */
      scanf  ("%d", &size);
       
      for (i = 0; i < size; i++)
      {
        /* print the element of array */
        printf("Enter element of array : " );
         
        /* get array element from user and them stored into array */
        scanf("%d", &array[i]);
      }
        
      return 0;
    }
    result

    size of array : 8
    Enter element of array : 1
    Enter element of array : 2
    Enter element of array : 3
    Enter element of array : 4
    Enter element of array : 5
    Enter element of array : 6
    Enter element of array : 7

    I don't understand what will happen if I change array size like array[6] or array[8].

    array[6] store 6 elements

    array[8] store 8 elements

    array[2] store 2 element s
     
  2. Harald Kapp

    Harald Kapp Moderator Moderator

    10,567
    2,356
    Nov 17, 2011
    You can't change the size of an arry in C on the fly (while the program is running). The size of the array is fixed by the definition, here
    int array[4].
    To use memory of variable size you use dynamic memory allocation, see e.g. here.
    This will not work correctly. Your array has only 4 elements (defined by array[4]. When you access elements outside the defined index range (array[0]...array[3]) you access some memory location that is used for other purposes. It may e.g. hold other variables which you overwrite by your code. It is good practice to check array accesses to be within the bounds of the array, i.e.index >= 0 and index < max. index defined for teh array. The sizeof operator can be used for this purpose.

    I do not understand where's the problem. It is as you describe.
     
  3. vead

    vead

    473
    14
    Nov 27, 2011
    If you look in the program, you will see two array sizes, one is array[4] and other is size of array : (8 user define)

    How will you decide what could the size array[number] ? What changes happen if I change number like 2,4,6,8,9.. in given program ? will it still store only 8 numbers ?
     
    BobK likes this.
  4. Harald Kapp

    Harald Kapp Moderator Moderator

    10,567
    2,356
    Nov 17, 2011
    No.
    There is only one definition in line 4:
    Code:
    int i, array[4], size;
    Entering a size bigger than that defined will lead to an error as described in my post #2. The value of the variable 'size' needs to be not higher than the real size of the array (4 integers).
    This may seemingly work in your small example, but there is no guaranteee it will work in the context of a larger program, another compiler etc.

    Addendum: A C compiler will not prevent you from addressing an array element outside of the defined range. An array element is adressed by converting the index in square brackets into a memory address:
    address = address_of_array[0] + index*size_of_array_element
    Example:
    Assume the array is located at address 0x0000.
    Assume array is defined as
    int16 array[4];
    The element size is int16 which requires 2 bytes.
    array[0] is then located at 0x0000 (byte addresses 0x0000 and 0x0001 are used for storing 1 int16 value)
    array[1] is then located at 0x0002
    ...
    array[3] is located at 0x0006

    When you try to access array[4], the processor will calculate an address of 0x0008 which in this case is a valid memory address. However, this address is not reserved for contents of the array. The compiler may have assigned this address to e.g. the variable 'size', since it only reserved the range 0x0000...0x0007 (4 * int16) for this array. When you write to array[4] this will overwrite any data present at this address. In my example the value of the variable 'size' may be changed.

    Read here for a more detailed explanation.
     
    Last edited: Jan 4, 2018
    vead likes this.
  5. vead

    vead

    473
    14
    Nov 27, 2011
    Now I understood. Thank you very much
     
Ask a Question
Want to reply to this thread or ask your own question?
You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.
Electronics Point Logo
Continue to site
Quote of the day

-