Почему размер массива больше, чем элементы в скобках?

#arrays #sorting

#массивы #сортировка

Вопрос:

Я работал над пониманием сортировки и столкнулся с этой проблемой. Когда я печатаю размер array[] , я получаю 32. Почему это 32, а не 8? Также, когда я печатаю каждый элемент, почему числа сортируются в конце массива (начиная с массива [24] и далее?). Я также пытался с

 int array[8]= {6,3,8,5,2,7,4,1};
 

но это ничего не меняет.

Спасибо за вашу помощь!

 #include <stdio.h>

int array[]= {6,3,8,5,2,7,4,1};

int main ()
{   
    printf("si of array %lu n", sizeof(array));
    for (int i = 0; i < sizeof(array); i  )
    {
         for (int  j = i 1; j < sizeof(array); j  )
    {
            if (array[i] > array[j])
            {
                int temp = array[i];
                array[i] = array[j];
                array[j] = temp;
            }
        }
    }
    printf("sizee of array %lu n", sizeof(array));

    for (int i = 0; i < sizeof(array); i  )
    {
        printf("array[%i] = %d n", i ,array[i]);
    }
    return 0;
}
 

Ответ №1:

sizeof(array) вернет размер массива в байтах, и поскольку каждое целое число равно 4 байтам, именно поэтому вы получаете размер в 32 байта (8 * 4 байта) для 8 элементов.

Чтобы получить количество элементов в массиве, вы должны использовать:

 size_t n = sizeof(array) / sizeof(int);
 

Теперь, если вы используете указанный выше размер, ваша сортировка должна работать нормально.

Комментарии:

1. Спасибо! имеет смысл