Я бы предложил пойти для массива, если тип данных переменных одинаковый. Вы можете попробовать что-то подобное
String[] Var = {"something","something2","something else"};
for (String var : Var)
{
System.out.println(var);
}
Необходимо было бы передать его функции. Можно использовать sizeof () для получения размера массива.
const char foo[] = "foobar";
void doSomething( char *ptr, int length)
{
}
doSomething(foo, sizeof(foo));
страница This MSDN имеет, объясняет больше о sizeof и имеет больший пример.
Редактирование: * видят, что ответ j_random_hacker для интригующего использования техники обрабатывает по шаблону... *
Используйте шаблон функции вместо этого, который имеет шаблонный параметр нетипа:
template <size_t N>
void func(char (&a)[N]) {
for (int i = 0; i < N; ++i) {
cout << "a[" << i << "] = " << a[i] << endl; // Or whatever you want to do
}
}
Для вызова:
char myArray[500]; // Or "static char myArray[500]", if you want
func(myArray);
А новая копия этой функции инстанцируют для каждого отличного размера массива, которым с этим называют, поэтому если Вы звоните, это со многими разного размера выстраивает, Вы получите некоторое чрезмерное увеличение размера кода. Но это вряд ли будет иметь место.
Нет. Не используйте массивы. Используйте вектор вместо этого. В эти дни нет почти никакого оправдания за использование массивов, потому что они небезопасны. AFAIK, они - одна из главных причин для программных проблем, потому что настолько легко случайно превысить конец массива.
Используя вектор, Вы не должны больше волноваться о переполнении буфера. И Ваша функция может легко узнать размер vecor.
#include <vector>
vector<char> myVector;
void DoSomething(vector<char> &v)
{
int sizeOfVector = v.size();
}
Вы не можете. Массивы в C++ являются указателями, и это - все, что Вы имеете: указатель на начало массива. Если это, оказывается, строка, можно использовать strlen для измерения его длины. Если его некоторый другой известный формат, можно вычислить длину согласно тому формату.
Рассматривают этот код:
static char str[] = "hello world";
foo(str);
bar(str);
void foo(char* str)
{
// length of str is unknown
}
void bar(char str[])
{
// length of str is still unknown
}
Независимо от того, если Ваш параметр функции является символом [] или символом*, Вы не знаете размера.
я предлагаю передать размер в как отдельный параметр.
Еще одна опция, которую Вы имеете, создает строковый класс, который управляет строкой. Я уверен, что кто-то там уже сделал это. Самая примитивная версия является структурой с символом * и длина буфера, где необходимо вручную управлять размером каждый раз, когда это изменяется. Другой конец спектра является полностью реализованным строковым классом с перегрузкой оператора и функциями manupulation.
Затем передача этот класс к Вашей функции и это уже знает размер. Это действительно несколько не отличается затем передача его как отдельный параметр; это просто - более легкий способ управлять строками, если они - все различные длины.
int array_size = sizeof (Array) / sizeof (Array [0]);