int array [10] = {1, 2, 0, 3}. Как я могу узнать, что здесь 4 элемента? Я знаю, как узнать размер массива - PullRequest
0 голосов
/ 28 мая 2020

Я пробовал этот код .. Как видите, проблема в том, что пустые элементы равны нулю. Итак, я попытался проверить это, но дело в том, что у меня может быть 0 как элемент.


int main()
{
    int array[10] = {1, 2, 0, 3, 4};

    printf("%d\n", sizeof(array)/ sizeof(*array)); // This is the size of array

    int i = 0;

    while(array[i] != 0  && i < 10) {
        i++;
    };

    printf("%d\n", i);

    return 0;
}```

Ответы [ 4 ]

2 голосов
/ 28 мая 2020

Вы не можете. int array[10] всегда будет создавать массив из 10 элементов, и вы не можете спросить компилятор, какие из них были назначены.

Вы могли бы сделать int array[] = {1, 2, 0, 3, 4}, тогда компилятор определит количество элементов для ты и у тебя будет sizeof(array)/ sizeof(*array) == 5

1 голос
/ 28 мая 2020

Сначала установите для массива число, выходящее за пределы диапазона ваших входных данных. Как отрицательное число.

for(i = 0;i < 10;i++)
    array[i] = -1;

или установите INT_MAX или INT_MIN

0 голосов
/ 28 мая 2020

У вас есть несколько вариантов:

  1. Вы знаете, сколько элементов находится в инициализаторе, поэтому вы создаете другую переменную, которая хранит это число:
    int array[10] = {1, 2, 0, 3, 4};
    int num_items = 5;
    
    Вам нужно будет обновить num_items как вы «добавляете» или «удаляете» элементы в массив. Если вы обрабатываете массив как стек (добавляете или удаляете только по наивысшему индексу), то это просто: sh:
    array[num_items++] = 7; // adds 7 after 4
    ...
    x = array[--num_items]; // x gets 7, 7 is "removed" from the array, need special
                            // case logic for element 0
    
  2. Вы выбираете значение, которое не действительное (скажем, -1) и явно инициализируйте остальные элементы:
    int array[10] = {1, 2, 0, 3, 4, -1, -1, -1, -1, -1 };
  3. Вы определяете размер массива для инициализатора, то есть он может хранить только такое количество элементов:
    int array[] = {1, 2, 0, 3, 4};

В противном случае вы ' Мне нужно будет использовать другую структуру данных (например, связанный список), если вам нужен контейнер, который может увеличиваться или уменьшаться по мере добавления или удаления элементов.

0 голосов
/ 28 мая 2020

массив int [10] = {1, 2, 0, 3}. Как я могу узнать, что здесь 4 элемента?

Как вы можете сказать, что там 4 элемента, если вы заявили, что int array[10] с размером 10 элементов. Это означает, что вы уже знаете, что нет. элементов. Кроме того, в этом сценарии вы не можете использовать оператор if для определения номера. элементов, как вы, вероятно, знаете, что в C, если вы инициализируете массив из 10 элементов с менее чем 10 значениями, остальным из них автоматически будет присвоено 0.

...