Откуда поступает массив? Обычно функции, которые принимают массивы, также принимают параметр длины для решения этой проблемы.
Майкл Майерс
2
Что ж, я делаю программу «безумных либ», в которой есть массив со всем текстом, а также расположение существительных / глаголов, которые пользователь должен заполнить. Я хотел бы использовать функцию для запуска через весь массив, заменив значения «[существительное]» и «[глагол» »текстом, введенным пользователем.
Maxpm
возможная
копия
5
Обратите внимание, что в C массивы не являются объектами или структурами. Как таковые, они не имеют параметра длины, сохраненного в любом месте по умолчанию. Если вы хотите работать с ними как с объектами в C ++, используйте объекты C ++ std :: vector или std :: array из C ++ 11, если можете. Если вам нужно использовать указатели, всегда передавайте длину массива в качестве второго параметра каждой функции, которая работает с ним.
Пихан
Если вы используете C ++ 20, то я также добавил ответ на этот вопрос. Это может быть легко пропущено, так как здесь так много ответов.
gprathour
Ответы:
511
Если вы имеете в виду массив в стиле C, то вы можете сделать что-то вроде:
int a[7];
std::cout <<"Length of array = "<<(sizeof(a)/sizeof(*a))<< std::endl;
Это не работает с указателями (то есть не работает ни для одного из следующих):
int*p =newint[7];
std::cout <<"Length of array = "<<(sizeof(p)/sizeof(*p))<< std::endl;
Это также не сработает, если вы передадите массив другой функции и попытаетесь сделать это там :)
San Jacinto
23
@San Jacinto: Нет, это работает (для массивов ) независимо от того, в какой функции вы находитесь. Передача массива переменной длины в функцию в качестве параметра, однако, невозможна (он затухает в указатель) - но если вы передадите массив внутри структуры, то это работает как ожидалось.
Eq-
1
@OliverCharlesworth также, если вы передали массив по значению другой функции и попробовали его там, он не будет работать, верно? Вопрос в том, почему
A_Matar
5
@A_Matar - Вы не можете передать массив по значению в C или C ++.
Оливер Чарльзуорт,
1
@yusha - это одно и то же.
Оливер Чарльзуорт
142
Как уже говорили другие, вы можете использовать, sizeof(arr)/sizeof(*arr)но это даст вам неправильный ответ для типов указателей, которые не являются массивами.
Это имеет приятное свойство не компилироваться для типов, не являющихся массивами (в Visual Studio _countofэто делается). Это constexprделает это выражение времени компиляции, поэтому у него нет недостатков по сравнению с макросом (по крайней мере, я не знаю о нем).
Вы также можете рассмотреть возможность использования std::arrayиз C ++ 11, которая показывает его длину без издержек над собственным массивом C.
C ++ 17 имеет std::size()в <iterator>заголовке, который делает то же самое и работает для контейнеров STL (благодаря @Jon C ).
@ Да, это то, как вы пишете ссылку на массив , смотрите этот ответ . Моя версия выглядит немного по-другому, так как я пропустил имя параметра, так как параметр не используется, нужен только его тип. С именем это было бы T(arg&)[N].
Мотти
1
Спасибо, Мотти! Оставленное имя параметра мне уже было ясно. Но невероятно, что я, по-видимому, раньше не использовал ссылки / указатели на массивы . И, вероятно, не будет в будущем, поскольку такие массивы вымирают еще больше.
@IsaacPascual, с которым я не был знаком extent, сейчас я вижу две характеристики, которые делают его менее полезным, чем функция выше (для этого варианта использования). (1) Возвращает ноль для указателей (а не ошибку компиляции). (2) Требуется параметр типа, поэтому, чтобы проверить переменную, которую вы должны сделать,decltype
Motti
86
В результате sizeof( myArray )вы получите общее количество байтов, выделенных для этого массива. Затем вы можете узнать количество элементов в массиве, разделив на размер одного элемента в массиве:sizeof( myArray[0] )
Это очень простое и легкое решение для преодоления проблемы, которая кажется извечной.
4
Не работает для C ++ «новых» массивов, удерживаемых указателем. Вы получите размер указателя (4 байта) или размер его первого элемента, если вы разыменуете его.
DragonLord
1
@DragonLord да, хотя любой, кто объявляет размер массива с помощью ключевого слова new, уже будет знать размер массива во время выполнения, поэтому нет необходимости использовать оператор sizeof, чтобы найти размер массива в этом случае. Я уверен, что вы это знаете. Это только для пользы тех, кто этого не делает.
Мартын Шутт
@surega Это не рухнет
CITBL
61
Хотя это старый вопрос, стоит обновить ответ на C ++ 17. В стандартной библиотеке теперь есть шаблонная функция std::size(), которая возвращает количество элементов в контейнере std или в массиве в стиле C. Например:
Это не будет работать для переменных отдельных размеров массива
Дон Ларинкс
4
+1 для векторов. Существует очень мало веских аргументов в пользу использования массивов старого стиля C ++. Если размер массива никогда не изменится, но даже тогда вы должны вместо этого использовать класс контейнера массива. Для хранения динамических массивов лучше использовать контейнерный класс, например vector. Преимущества использования контейнерных классов намного перевешивают недостатки управления собственной памятью.
Мартын Шутт
@MartynShutt Когда вы привязаны к кешу, как в gamedev, вы иногда не можете позволить себе использовать вектор.
Тара
30
std::vectorесть метод, size()который возвращает количество элементов в векторе.
Я считаю, что это работает только для локальных переменных, которые находятся в стеке.
DragonLord
Это лучший ответ. @DragonLord, это работает и для членов. Смотрите cpp.sh/92xvv .
Шиталь Шах
24
Начиная с C ++ 11, введены некоторые новые шаблоны, которые помогут уменьшить боль при работе с длиной массива. Все они определены в заголовке <type_traits>.
If Tявляется типом массива, обеспечивает значение константы члена, равное количеству элементов вдоль Nизмерения th массива, если Nнаходится в [0, std::rank<T>::value). Для любого другого типа, или если Tэто массив с неизвестной границей вдоль его первого измерения и Nравен 0, значение равно 0.
Если Tявляется массивом некоторого типа X, обеспечивает член typedef тип, равный X, в противном случае тип T. Обратите внимание, что если Tэто многомерный массив, удаляется только первое измерение.
В C ++, используя класс std :: array для объявления массива, можно легко найти размер массива, а также последний элемент.
#include<iostream>#include<array>int main(){
std::array<int,3> arr;//To find the size of the array
std::cout<<arr.size()<<std::endl;//Accessing the last elementauto it=arr.end();
std::cout<<arr.back()<<"\t"<<arr[arr.size()-1]<<"\t"<<*(--it);return0;}
Ницца; Я вижу, у тебя много навыков; и ... отличный подход. Я думаю, что должен написать больше ответов на такие знаменитые вопросы и сам ;-)
GhostCat
5
Это довольно старый и легендарный вопрос, и там уже есть много удивительных ответов. Но со временем к языкам добавляются новые функции, поэтому мы должны продолжать обновлять их в соответствии с новыми доступными функциями.
Я только заметил, что никто еще не упомянул о C ++ 20. Вот и подумал написать ответ.
C ++ 20
В C ++ 20, есть новый лучший способ добавляется к стандартной библиотеке для нахождения длины массива , т.е. std:ssize(). Эта функция возвращает signed value.
Просто FYI, если вам интересно, почему этот подход не работает, когда массив передается другой функции . Причина в том,
Массив не передается по значению в C ++, вместо этого передается указатель на массив. Поскольку в некоторых случаях передача целых массивов может быть дорогостоящей операцией. Вы можете проверить это, передав массив в некоторую функцию и внеся в него некоторые изменения, а затем снова напечатайте массив в main. Вы получите обновленные результаты.
И, как вы уже знаете, sizeof()функция дает число байтов, поэтому в другой функции она возвращает количество байтов, выделенных для указателя, а не для всего массива. Так что этот подход не работает.
Но я уверен, что вы можете найти хороший способ сделать это, согласно вашему требованию.
ARRAYSIZE (arr) работает путем проверки sizeof (arr) (количество байтов в массиве) и sizeof (* (arr)) (количество байтов в одном элементе массива). Если первое делится на второе, возможно, arr действительно является массивом, и в этом случае результатом деления является число элементов в массиве. В противном случае arr не может быть массивом, и мы генерируем ошибку компилятора, чтобы предотвратить компиляцию кода.
Так как размер bool определяется реализацией, нам нужно привести! (Sizeof (a) & sizeof (* (a))) к size_t, чтобы конечный результат имел тип size_t.
Этот макрос не идеален, так как он ошибочно принимает определенные указатели, а именно, где размер указателя делится на размер указателя. Поскольку весь наш код должен проходить через 32-битный компилятор, где указатель составляет 4 байта, это означает, что все указатели на тип, размер которого равен 3 или больше 4, будут (по праву) отклонены.
с массивом целых чисел, подобным следующему: int nombres[5] = { 9, 3 };эта функция возвращает 5вместо 2.
Анвар
GOOGLE_ARRAYSIZE(new int8_t)возвращает 8в моем тестовом env, вместо того, чтобы выдавать ошибку. Литая часть кажется избыточной, не говоря уже о кричащем макросе C. sizeof(a) / sizeof(*a)работает достаточно как унаследованное решение.
3
Для C ++ / CX (при написании, например, приложений UWP с использованием C ++ в Visual Studio) мы можем найти число значений в массиве, просто используя size()функцию.
Хотя этот фрагмент кода может решить проблему, он не объясняет, почему и как он отвечает на вопрос. Пожалуйста, включите объяснение вашего кода, так как это действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос для читателей в будущем, и эти люди могут не знать причин, по которым вы предлагаете свой код
Балагурунатан Маримуту
3
ОТВЕТ :
int number_of_elements =sizeof(array)/sizeof(array[0])
ОБЪЯСНЕНИЕ :
Поскольку компилятор выделяет определенный объем памяти для каждого типа данных, а массив - это просто группа из них, вы просто делите размер массива на размер типа данных. Если у меня есть массив из 30 строк, моя система выделяет 24 байта для каждого элемента (строки) массива. На 30 элементах это всего 720 байтов. 720/24 == 30 элементов. Небольшой, жесткий алгоритм для этого:
int number_of_elements = sizeof(array)/sizeof(array[0]) что соответствует
number_of_elements = 720/24
Обратите внимание, что вам не нужно знать, какой тип данных у массива, даже если это пользовательский тип данных.
Нет необходимости в этом устаревшем и подверженном ошибкам подходе в 2019 году. Stackoverflow.com/a/59109106/560648 Кроме того, это всего лишь обман существующих ответов.
Гонки
Это, однако, просто, красноречиво, быстро, с низким спросом, не зависит от платформы и устраняет необходимость включать вектор или указатели. Что касается дублирования других ответов, кажется, что есть только один другой ответ с тем же алгоритмом, и он не дает объяснения основной механике проблемы, как мой ответ. Я с уважением предполагаю, что он не подвержен ошибкам, а достаточно надежен.
Боб Уорнер
1
Просто подумал, но решил создать переменную счетчика и сохранить размер массива в позиции [0]. Я удалил большую часть кода, который у меня был в функции, но после выхода из цикла вы увидите, что простому [0] присваивается окончательное значение 'a'. Я пытался использовать векторы, но VS Express 2013 не очень понравилось. Также обратите внимание, что «a» начинается с единицы, чтобы избежать перезаписи [0], и инициализируется в начале, чтобы избежать ошибок. Я не эксперт, просто думал, что поделюсь.
int prime[]={0};int primes(int x,int y){usingnamespace std;int a =1;for(int i = x; i <= y; i++){prime[a]= i; a++;}
prime[0]= a;return0;}
@bobbogo Работает с inline или constexpr, может быть, у вас отключен inline или это необязательно? ideone.com/VxogJ4
QuentinUK
@QentinUK constexpr- это исправление. inlineне является. constexprдовольно современный, хотя Вы уверены, что ваша тестовая программа не использует другую современную функцию, где вы можете объявить локальный массив, длина которого задается переменной? Попробуйте это с двумя глобальными массивами.
Боббого
1
Для старого компилятора g ++, вы можете сделать это
Это работает только тогда, когда arrтип совместим с, intа массив не длиннее максимального значения типа. Например, строки Pascal на самом деле являются байтовыми массивами, использующими этот трюк; максимальная длина строк в Паскале составляет 255 символов.
Палек
Я полагаю, что можно зарезервировать, скажем, 8 байтов в начале каждого массива и использовать длинную без знака, если они хотят хранить объекты. Я думаю, что вектор, вероятно, проще. Но определенно хорошее решение для встраиваемых систем.
aj.toulan
1
Вы можете найти длину массива следующим образом:
int arr[]={1,2,3,4,5,6};int size =*(&arr +1)- arr;
cout <<"Number of elements in arr[] is "<< size;return0;
Лично я бы предложил (если по какой-либо причине вы не можете работать со специализированными функциями) сначала расширить совместимость типов массивов за пределы того, что вы обычно используете как (если вы сохраняете значения ≥ 0:
unsignedint x[]->int x[]
чем вы сделаете элемент массива на 1 больше, чем вам нужно. Для последнего элемента вы бы поместили некоторый тип, который включен в спецификатор расширенного типа, но который вы обычно не используете, например, в предыдущем примере последний элемент будет равен -1. Это позволяет вам (используя цикл for) найти последний элемент массива.
Одна из наиболее распространенных причин, по которой вам придется искать это, заключается в том, что вы хотите передать массив функции, а не передавать другой аргумент для его размера. Вы также хотели бы, чтобы размер массива был динамическим. Этот массив может содержать объекты, а не примитивы, и объекты могут быть сложными, так что size_of () является небезопасной опцией для вычисления количества.
Как уже предлагали другие, рассмотрите возможность использования std :: vector или list и т. Д. Вместо примитивного массива. Однако на старых компиляторах у вас все еще не было бы окончательного решения, которое вы, вероятно, хотели бы сделать, просто делая это, потому что для заполнения контейнера требуется куча уродливых строк push_back (). Если вы похожи на меня, вам нужно однострочное решение с участием анонимных объектов.
Ответы:
Если вы имеете в виду массив в стиле C, то вы можете сделать что-то вроде:
Это не работает с указателями (то есть не работает ни для одного из следующих):
или:
В C ++, если вы хотите такое поведение, тогда вы должны использовать контейнерный класс; вероятно
std::vector
.источник
Как уже говорили другие, вы можете использовать,
sizeof(arr)/sizeof(*arr)
но это даст вам неправильный ответ для типов указателей, которые не являются массивами.Это имеет приятное свойство не компилироваться для типов, не являющихся массивами (в Visual Studio
_countof
это делается). Этоconstexpr
делает это выражение времени компиляции, поэтому у него нет недостатков по сравнению с макросом (по крайней мере, я не знаю о нем).Вы также можете рассмотреть возможность использования
std::array
из C ++ 11, которая показывает его длину без издержек над собственным массивом C.C ++ 17 имеет
std::size()
в<iterator>
заголовке, который делает то же самое и работает для контейнеров STL (благодаря @Jon C ).источник
T(arg&)[N]
.extent
, сейчас я вижу две характеристики, которые делают его менее полезным, чем функция выше (для этого варианта использования). (1) Возвращает ноль для указателей (а не ошибку компиляции). (2) Требуется параметр типа, поэтому, чтобы проверить переменную, которую вы должны сделать,decltype
В результате
sizeof( myArray )
вы получите общее количество байтов, выделенных для этого массива. Затем вы можете узнать количество элементов в массиве, разделив на размер одного элемента в массиве:sizeof( myArray[0] )
источник
Хотя это старый вопрос, стоит обновить ответ на C ++ 17. В стандартной библиотеке теперь есть шаблонная функция
std::size()
, которая возвращает количество элементов в контейнере std или в массиве в стиле C. Например:источник
Да!
Пытаться
sizeof(array)/sizeof(array[0])
Я не вижу никакого способа для этого, если ваш массив не является массивом символов (то есть строка).
PS: в C ++ всегда пользуюсь
std::vector
. Есть несколько встроенных функций и расширенная функциональность.источник
std::vector
есть метод,size()
который возвращает количество элементов в векторе.(Да, это насмешливый ответ)
источник
источник
Начиная с C ++ 11, введены некоторые новые шаблоны, которые помогут уменьшить боль при работе с длиной массива. Все они определены в заголовке
<type_traits>
.std::rank<T>::value
If
T
является типом массива, предоставляет значение константы члена, равное количеству измерений массива. Для любого другого типа значение равно 0.std::extent<T, N>::value
If
T
является типом массива, обеспечивает значение константы члена, равное количеству элементов вдольN
измерения th массива, еслиN
находится в [0,std::rank<T>::value
). Для любого другого типа, или еслиT
это массив с неизвестной границей вдоль его первого измерения иN
равен 0, значение равно 0.std::remove_extent<T>::type
Если
T
является массивом некоторого типаX
, обеспечивает член typedef тип, равныйX
, в противном случае типT
. Обратите внимание, что еслиT
это многомерный массив, удаляется только первое измерение.std::remove_all_extents<T>::type
Если
T
является многомерным массивом некоторого типаX
, обеспечивает член typedef тип, равныйX
, в противном случае тип являетсяT
.Чтобы получить длину в любом измерении многомерного массива,
decltype
можно использовать для объединения сstd::extent
. Например:BTY, чтобы получить общее количество элементов в многомерном массиве:
Или поместите это в шаблон функции:
Дополнительные примеры их использования можно найти по ссылкам.
источник
Существует также способ TR1 / C ++ 11 / C ++ 17 (см. Его Live on Coliru):
источник
Вместо использования встроенной функции массива aka:
Вы должны использовать класс массива и шаблон массива. Пытаться:
Так что теперь, если вы хотите найти длину массива, все, что вам нужно сделать, это использовать функцию размера в классе массива.
и это должно вернуть длину элементов в массиве.
источник
В C ++, используя класс std :: array для объявления массива, можно легко найти размер массива, а также последний элемент.
На самом деле, класс массива имеет множество других функций, которые позволяют использовать массив в стандартном контейнере.
Ссылка 1 на класс C ++ std :: array
Ссылка 2 на класс std :: array
Примеры в ссылках полезны.
источник
Это довольно старый и легендарный вопрос, и там уже есть много удивительных ответов. Но со временем к языкам добавляются новые функции, поэтому мы должны продолжать обновлять их в соответствии с новыми доступными функциями.
Я только заметил, что никто еще не упомянул о C ++ 20. Вот и подумал написать ответ.
C ++ 20
В C ++ 20, есть новый лучший способ добавляется к стандартной библиотеке для нахождения длины массива , т.е.
std:ssize()
. Эта функция возвращаетsigned value
.C ++ 17
В C ++ 17 был лучший способ (в то время) для того же, который
std::size()
определен вiterator
.PS Этот метод работает
vector
также.старый
Этот традиционный подход уже упоминался во многих других ответах.
Просто FYI, если вам интересно, почему этот подход не работает, когда массив передается другой функции . Причина в том,
Массив не передается по значению в C ++, вместо этого передается указатель на массив. Поскольку в некоторых случаях передача целых массивов может быть дорогостоящей операцией. Вы можете проверить это, передав массив в некоторую функцию и внеся в него некоторые изменения, а затем снова напечатайте массив в main. Вы получите обновленные результаты.
И, как вы уже знаете,
sizeof()
функция дает число байтов, поэтому в другой функции она возвращает количество байтов, выделенных для указателя, а не для всего массива. Так что этот подход не работает.Но я уверен, что вы можете найти хороший способ сделать это, согласно вашему требованию.
Удачного кодирования.
источник
У вас есть куча опций, которые будут использоваться для получения размера массива Си.
int myArray [] = {0, 1, 2, 3, 4, 5, 7};
1) sizeof(<array>) / sizeof(<type>):
2) sizeof(<array>) / sizeof(*<array>):
3) sizeof(<array>) / sizeof(<array>[<element>]):
источник
Вот одна реализация
ArraySize
от Google Protobuf .источник
int nombres[5] = { 9, 3 };
эта функция возвращает5
вместо2
.GOOGLE_ARRAYSIZE(new int8_t)
возвращает8
в моем тестовом env, вместо того, чтобы выдавать ошибку. Литая часть кажется избыточной, не говоря уже о кричащем макросе C.sizeof(a) / sizeof(*a)
работает достаточно как унаследованное решение.Для C ++ / CX (при написании, например, приложений UWP с использованием C ++ в Visual Studio) мы можем найти число значений в массиве, просто используя
size()
функцию.Исходный код:
Если вы на выходе будет:
cout
size_of_array
источник
sizeof(array_name)
дает размер всего массива иsizeof(int)
дает размер типа данных каждого элемента массива.Таким образом, деление размера всего массива на размер одного элемента массива дает длину массива.
источник
ОТВЕТ :
ОБЪЯСНЕНИЕ :
Поскольку компилятор выделяет определенный объем памяти для каждого типа данных, а массив - это просто группа из них, вы просто делите размер массива на размер типа данных. Если у меня есть массив из 30 строк, моя система выделяет 24 байта для каждого элемента (строки) массива. На 30 элементах это всего 720 байтов. 720/24 == 30 элементов. Небольшой, жесткий алгоритм для этого:
int number_of_elements = sizeof(array)/sizeof(array[0])
что соответствуетnumber_of_elements = 720/24
Обратите внимание, что вам не нужно знать, какой тип данных у массива, даже если это пользовательский тип данных.
источник
Просто подумал, но решил создать переменную счетчика и сохранить размер массива в позиции [0]. Я удалил большую часть кода, который у меня был в функции, но после выхода из цикла вы увидите, что простому [0] присваивается окончательное значение 'a'. Я пытался использовать векторы, но VS Express 2013 не очень понравилось. Также обратите внимание, что «a» начинается с единицы, чтобы избежать перезаписи [0], и инициализируется в начале, чтобы избежать ошибок. Я не эксперт, просто думал, что поделюсь.
источник
Хорошее решение, которое использует дженерики:
Затем просто позвоните,
arraysize(_Array);
чтобы получить длину массива.Источник
источник
constexpr
- это исправление.inline
не является.constexpr
довольно современный, хотя Вы уверены, что ваша тестовая программа не использует другую современную функцию, где вы можете объявить локальный массив, длина которого задается переменной? Попробуйте это с двумя глобальными массивами.Для старого компилятора g ++, вы можете сделать это
источник
Я предлагаю хитрое решение здесь:
Вы всегда можете хранить
length
в первом элементе:Стоимость вы должны
--arr
при вызовеfree
источник
arr
тип совместим с,int
а массив не длиннее максимального значения типа. Например, строки Pascal на самом деле являются байтовыми массивами, использующими этот трюк; максимальная длина строк в Паскале составляет 255 символов.Вы можете найти длину массива следующим образом:
источник
Просто вы можете использовать этот фрагмент:
и вот ссылка: http://www.cplusplus.com/reference/array/array/size/
источник
Избегайте использования типа вместе с sizeof, так как
sizeof(array)/sizeof(char)
внезапно портится, если вы измените тип массива.В визуальной студии у вас есть эквивалент, если
sizeof(array)/sizeof(*array)
. Вы можете просто напечатать_countof(array)
источник
Лично я бы предложил (если по какой-либо причине вы не можете работать со специализированными функциями) сначала расширить совместимость типов массивов за пределы того, что вы обычно используете как (если вы сохраняете значения ≥ 0:
чем вы сделаете элемент массива на 1 больше, чем вам нужно. Для последнего элемента вы бы поместили некоторый тип, который включен в спецификатор расширенного типа, но который вы обычно не используете, например, в предыдущем примере последний элемент будет равен -1. Это позволяет вам (используя цикл for) найти последний элемент массива.
источник
Одна из наиболее распространенных причин, по которой вам придется искать это, заключается в том, что вы хотите передать массив функции, а не передавать другой аргумент для его размера. Вы также хотели бы, чтобы размер массива был динамическим. Этот массив может содержать объекты, а не примитивы, и объекты могут быть сложными, так что size_of () является небезопасной опцией для вычисления количества.
Как уже предлагали другие, рассмотрите возможность использования std :: vector или list и т. Д. Вместо примитивного массива. Однако на старых компиляторах у вас все еще не было бы окончательного решения, которое вы, вероятно, хотели бы сделать, просто делая это, потому что для заполнения контейнера требуется куча уродливых строк push_back (). Если вы похожи на меня, вам нужно однострочное решение с участием анонимных объектов.
Если вы используете контейнер STL, альтернативный примитивному массиву, этот пост SO может пригодиться вам для способов его инициализации: Каков самый простой способ инициализации std :: vector с жестко закодированными элементами?
Вот метод, который я использую для этого, который будет работать универсально на всех компиляторах и платформах:
Создайте структуру или класс в качестве контейнера для вашей коллекции объектов. Определить функцию перегрузки оператора для <<.
Вы можете создавать функции, которые принимают вашу структуру в качестве параметра, например:
Затем вы можете вызвать эту функцию, например так:
Таким образом, вы можете построить и передать динамически измеренную коллекцию объектов в функцию в одну чистую строку!
источник
Допустим, у вас есть глобальный массив, объявленный в верхней части страницы
Чтобы узнать, сколько элементов (в c ++) в массиве, введите следующий код:
Sizeof (NAME_OF_ARRAY) / 4 вернет вам количество элементов для данного имени массива.
источник