Подскажите как узнать длину массива? Или как добавить элемент в конец массива? 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]'"
Нет, это статический массив нулевого размера, можно узнать размер: sizeof(re). Для динамического используется оператор new или malloc
В 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
Задавать размер массива переменными нельзя. Нужно прописывать размер явно, например 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]);
Вот эта фраза: Код (C++): sizeof(re)/sizeof(re[0]); по моему мнению определяет количество элементов (типа int) массиве тоесть размер массива sizeof(re) разделить на размер элемента sizeof(re[0]) (что соответствует sizeof(int) равно количество элементов в массиве. Для цикла (количество) то, что надо... но определение (выражение) меня поставило в ступор. Простите!!!
Да, возможно, я просто не совсем верно выразился. Размер массива в байтах определяется вот этим: Код (C++): sizeof(re) А вот это, Код (C++): sizeof(re[0]) как верно подмечено, определяет размер в байтах одного элемента массива, в данном случае типа int. Соответственно, разделив общий размер массива на размер одного его элемента, получим количество элементов в массиве. Не надо мне было это размером называть, чтобы не вводить в заблуждение))
Прям таки нельзя? А как насчёт этого примера: Код (C++): void func(int i) { char arr[i]; for (int k = 0; k < i; k++) { arr[k] = k; } } хотите сказать компилятор выдаст ошибку? И программа не будет работать?
Не выдаст. И будет работать. Локальные переменные создаются динамически при входе в функцию. Естественно, что при этом уже будет определено значение i и понятно какой объем памяти нужно распределить.
Нет, не удалится. Просто программа получит разрешение на использование этого места под другие переменные. Но если другие локальные переменные не появятся, то эти массивом через указатели даже можно пользоваться. Но это не самый хороший метод написания кода