ФорумПрограммированиеБольше языковC/C++ и C# → Ц: размер безразмерного массива

Ц: размер безразмерного массива

  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 1 мая 2012 г. 4:09

    Забыл уже сей язык и в гугле забанили.

    int A[] = {1, 2, 3, 4, 5};

    как узнать количество элементов в A?
  • Nyaah

    Сообщения: 574 Репутация: N Группа: Джедаи

    Spritz 1 мая 2012 г. 4:19, спустя 10 минут

    sizeof(A) / sizeof(int)
    Work, buy, consume, die
  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 1 мая 2012 г. 4:25, спустя 5 минут 40 секунд

    A - указатель на массив, sizeof(A) = 4
    Спустя 120 сек.
    а, не, цук, сработало.
    спасибо.
    как всегда в Ц, одно и тоже, то не работает, то работает :)
  • Nyaah

    Сообщения: 574 Репутация: N Группа: Джедаи

    Spritz 1 мая 2012 г. 4:32, спустя 6 минут 47 секунд

    А ты проверь:

    #include <stdio.h>
    #include <stdlib.h>

    int main(int argc, char** argv)
    {
    int testArray[] = {0,1,2,3,4,5,6,7,8,9};

    printf("Sizeof: %d", sizeof(testArray));
    return (EXIT_SUCCESS);
    }
    Выводит 40, думаешь размер указателя равен 40? =)
    Спустя 110 сек.
    http://www.rsdn.ru/forum/cpp/807993.all.aspx
    Work, buy, consume, die
  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 1 мая 2012 г. 4:37, спустя 5 минут 28 секунд

    Выводит 40, думаешь размер указателя равен 40? =)

    я ж написл, что всё заебись
    Спустя 12 сек.
    даже плюсик поставил
  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 1 мая 2012 г. 4:53, спустя 16 минут 16 секунд

    Хотя изначальная проблема немного другая была:

    void func(int A[]) {
    printf("%u\n", sizeof(A)); // 4
    }

    int main(int argc, char** argv) {
    int A = {1, 2, 3, 4, 5};
    func(A);
    }


    вон внутри func() хз.
  • Nyaah

    Сообщения: 574 Репутация: N Группа: Джедаи

    Spritz 1 мая 2012 г. 5:01, спустя 7 минут 32 секунды

    Да я не заметил плюсег, полез в виртуалку проверять, не напиздел ли, а потом запостил ответ )
    А по поводу определения в функции размера массива: на этапе компиляции размер внутри функции неизвестен, так как с каким параметром ты вызовешь функцию неизвестно. Поэтому необходимо отправлять не только указатель на массив, но и его размер, либо как со строками заюзать что-нибуть в качестве нультерминатора.
    Спустя 26 сек.
    Либо использовать std::vector
    Work, buy, consume, die
  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 1 мая 2012 г. 5:12, спустя 10 минут 55 секунд

    Поэтому необходимо отправлять не только указатель на массив, но и его размер, либо как со строками заюзать что-нибуть в качестве нультерминатора.

    ясно, так и сделал.

    Либо использовать std::vector

    у меня просто си, без плюсов.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!