почему я не могу вычислить массив во втором цикле, когда я использую sizeof(array)/sizeof(array[0]) в качестве условия для цикла for?

почему я не могу вычислить массив во втором цикле, когда я использую sizeof(array)/sizeof(array[0]) в качестве условия для цикла for?

      #include <iostream>
    using namespace std;
    
    int main(){
        int num;
        int array[] = {};
        cout << " enter the numbers " << endl;
        for (int i = 0 ; i < 5 ; i ++ )
            cin >> array [i];
        num = sizeof(array)/sizeof(array[0]); 
            for ( int x = 0 ; x < num  ; x ++)
            cout << array[x] << endl;
            

1 ответ

Ваш массив имеет размер 0.

      int array[] = {};

Это инициализирует массив размером 0. Это то же самое, что и выполнение

      int array[0];

Подобные массивы не могут увеличиваться или уменьшаться, поэтому они не могут изменять свой размер. То, что вы, вероятно, хотите сделать, это

      int array[5];

что дает ему размер . Далее ваш тогда код тоже будет работать. Я предположил, что вам нужен размер 5, так как ваш первый цикл идет к 5.

Обратите внимание, что они действительно не могут изменить размер. Вы делаете его размером 0, он остается размером 0, независимо от того, что вы делаете после этого. В моем предложенном исправлении его размер 5, и он останется размером 5, вы не можете изменить его размер.

Кстати, запись в ячейки 0-5 в массиве с размером 0, как вы делаете, не подходит, так как у массива нет такого индекса. Неопределенное поведение для доступа к позициям за пределами этого массива.

Другие вопросы по тегам