c++ найти длину массива

AZA

/reset
Сообщения
883
Реакции
162
Приветствую,нужна помощь по реализации поиска длинны массива в c++.
sizeof(arr)/sizeof(*arr) не подходит ,если буду использовать данный метод в своей функции,то в любом случаи буду получать 1,так как мы знаем в функцию нельзя передать массив,можно передать указатель. и тольок
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #2

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #4
@vaxa, указатель на массив или именно массив?
 

Reiko1231

AlexTheRegent
Сообщения
508
Реакции
1,336
В таком случае передают указатель и длину массива, т.е.
C-подобный:
void myfn(int *ptr, int size);
По другому нельзя узнать длину динамического массива, т.к. компилятор не знает, что будет в указателе. Потому что значения sizeof подставляются на этапе компиляции, а не во время выполнения кода (можно посмотреть на примере сурсмоде - все sizeof() в декомпиле заменены цифрами).
Либо если прям нужно передать только один массив, всё равно нужно будет хранить где-то длину. Можно сделать "костыль" вида выделения +1 элемента, в нулевой элемент записывается длина, а в функцию передается ptr+1. Если нужно будет получить размер, то от ptr отнимается единица.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #7
Можно сделать "костыль" вида выделения +1 элемента, в нулевой элемент записывается длина, а в функцию передается ptr+1. Если нужно будет получить размер, то от ptr отнимается единица.
интересное решение, не видел такого
 

White Wolf

🍉
Сообщения
2,382
Реакции
2,187
  • Команда форума
  • #8
@R1KO, костыль есть костыль, так как никто заранее не знает что первый элемент массива это будет его размер. Да и вообще это какой-то грубый код получается.
 
Сверху Снизу