Длина массива arduino

Тема в разделе "Arduino & Shields", создана пользователем gada94, 24 янв 2017.

  1. gada94

    gada94 Нуб

    Подскажите как узнать длину массива? Или как добавить элемент в конец массива?
    int re[ ]={}; (такой массив називається динамическим?)
    int t=re.length +1;
    re[t]=15;

    length почему то не работает? вот так ругается "request for member 'length' in 're', which is of non-class type 'int [1]'"
     
  2. zealot01

    zealot01 Нерд

    Нет, это статический массив нулевого размера, можно узнать размер: sizeof(re). Для динамического используется оператор new или malloc
     
  3. mcureenab

    mcureenab Гуру

    В C++ массив имеет фиксированный размер, который нужно указать при его объявлении.

    some_type A[array_size];

    Функция возвращает размер типа аргумента: sizeof(A) == array_size.

    В структурах C поддерживается языковая конструкция A[0] или A[] (flexible array member).

    За некоторыми исключениями, к указателям в C++ можно применять оператор []. Т.е. работать с указателями как с массивами неопределенного размера.

    Иногда в последний элемент массива сохраняют маркер. Тогда фактический размер i массива A определяется путем перебора элементов от 0 до i, где A == маркер.

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

    http://ru.cppreference.com/w/cpp/container/vector
     
    Последнее редактирование: 24 янв 2017
    arkadyf нравится это.
  4. neyasbltb_88

    neyasbltb_88 Нуб

    Задавать размер массива переменными нельзя. Нужно прописывать размер явно, например int re[10]; и заполнять его циклом, например
    Код (C++):
    for(int i=0; i<10 i++) re[i]=i;
    Либо оставив квадратные скобки пустыми, заполнить значения массива
    Код (C++):
    int re[]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    Во втором случае размер массива определит сам компилятор, а узнать его можно таким путем:
    Код (C++):
    sizeof(re)/sizeof(re[0]);
     
    Последнее редактирование: 26 янв 2017
  5. Igor68

    Igor68 Гуру

    Вот эта фраза:
    Код (C++):
    sizeof(re)/sizeof(re[0]);
    по моему мнению определяет количество элементов (типа int) массиве
    тоесть размер массива sizeof(re) разделить на размер элемента sizeof(re[0]) (что соответствует sizeof(int) равно количество элементов в массиве. Для цикла (количество) то, что надо... но определение (выражение) меня поставило в ступор.
    Простите!!!
     
  6. neyasbltb_88

    neyasbltb_88 Нуб

    Да, возможно, я просто не совсем верно выразился. Размер массива в байтах определяется вот этим:
    Код (C++):
    sizeof(re)
    А вот это,
    Код (C++):
    sizeof(re[0])
    как верно подмечено, определяет размер в байтах одного элемента массива, в данном случае типа int. Соответственно, разделив общий размер массива на размер одного его элемента, получим количество элементов в массиве. Не надо мне было это размером называть, чтобы не вводить в заблуждение))
     
  7. AlexU

    AlexU Гуру

    Прям таки нельзя?
    А как насчёт этого примера:
    Код (C++):
    void func(int i)
    {
        char arr[i];

        for (int k = 0; k < i; k++)
        {
            arr[k] = k;
        }
    }
    хотите сказать компилятор выдаст ошибку? И программа не будет работать?
     
  8. sslobodyan

    sslobodyan Гик

    Не выдаст. И будет работать. Локальные переменные создаются динамически при входе в функцию. Естественно, что при этом уже будет определено значение i и понятно какой объем памяти нужно распределить.
     
  9. neyasbltb_88

    neyasbltb_88 Нуб

    Он же и удалится при выходе из функции
     
  10. sslobodyan

    sslobodyan Гик

    Нет, не удалится. Просто программа получит разрешение на использование этого места под другие переменные. Но если другие локальные переменные не появятся, то эти массивом через указатели даже можно пользоваться. Но это не самый хороший метод написания кода :)
     
    arkadyf нравится это.