Как можно узнать размер динамического массива, например int* или как получить указатель на его конец.
P.S. массив передается в функцию типа foo(int *).
Программист сам должен позаботиться о размере выделенной памяти. Если приложение не критично к скорости выполнения, обычно создают по быстрому свой класс указателя с этими данными. Можно писать как вам удобно, например так:
// g++ -Wall -Wpedantic pointertoarray.cpp
# include <iostream>
template<class T>
class PointerToArray{
public :
PointerToArray(T*t,size_t n = 1):p(t),s(n){}
PointerToArray(PointerToArray const & x):p(x.p),s(x.s){}
T & operator *()const{return * p;}
T * operator ->()const{return p;}
T & operator [](size_t i)const{return *(p + i) ; }
T * operator +(size_t i)const{return p + i ; }
T * begin()const{return p ;}
T * end()const{return p + s ;}
size_t size()const{return s;}
private :
T * p ;
size_t s ;
};
void g(PointerToArray<int> px) {
std::cout << "size of array is "<<px.size()<<std::endl;
std::cout << "px[5]=="<<px[5]<<std::endl;
std::cout << "*(px+5)=="<<(*(px+5))<<std::endl; }
int main() {
int * xp = new int[10];
xp[5]=777;
PointerToArray<int> px(xp,10);
g(px);
delete[]xp; }
результат:
> ./a.out
size of array is 10
px[5]==777
*(px+5)==777
В общем случае - никак.
В некоторых версиях определенных компиляторов можно получить эту информацию, но способ не универсален и может перестать работать в любой момент.
В данном случае либо функция foo должна принимать в качестве дополнительного параметра количество элементов в массиве, либо должен быть договор, что массив оканчивается определенным значением. Например, у всех функций, принимающих строки есть соглашение, что массив заканчивается символом с кодом 0
PS. В C++ лучше вообще отказаться от динамических массивов и использовать стандартные контейнеры array или vector. При необходимости стыковки с внешним кодом, они легко преобразуются в указатель на массив.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
У меня есть динамический массив, пишу функцию для "печати" значенийСоздаю указатель на массив uint8_t в кол-ве count и сразу обнуляю значения:
Есть выпадающий список ul li, который появляется при клике по полю инпутаДо клика ul li не существует на странице
В данном коде текст вставляется в форму сразу весьКак сделать что-то на подобии animate(), чтобы пользователь видел как в форме печатается автоматически...