Размер статического массива

Я бы предложил пойти для массива, если тип данных переменных одинаковый. Вы можете попробовать что-то подобное

        String[] Var = {"something","something2","something else"};
        for (String var : Var)
        {
        System.out.println(var);
        }
14
задан Ron 17 January 2009 в 10:25
поделиться

6 ответов

Необходимо было бы передать его функции. Можно использовать sizeof () для получения размера массива.

const char foo[] = "foobar";

void doSomething( char *ptr, int length)
{

}


doSomething(foo, sizeof(foo));

страница This MSDN имеет, объясняет больше о sizeof и имеет больший пример.

Редактирование: * видят, что ответ j_random_hacker для интригующего использования техники обрабатывает по шаблону... *

14
ответ дан 1 December 2019 в 06:05
поделиться

Используйте шаблон функции вместо этого, который имеет шаблонный параметр нетипа:

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);

А новая копия этой функции инстанцируют для каждого отличного размера массива, которым с этим называют, поэтому если Вы звоните, это со многими разного размера выстраивает, Вы получите некоторое чрезмерное увеличение размера кода. Но это вряд ли будет иметь место.

35
ответ дан 1 December 2019 в 06:05
поделиться

Нет. Не используйте массивы. Используйте вектор вместо этого. В эти дни нет почти никакого оправдания за использование массивов, потому что они небезопасны. AFAIK, они - одна из главных причин для программных проблем, потому что настолько легко случайно превысить конец массива.

Используя вектор, Вы не должны больше волноваться о переполнении буфера. И Ваша функция может легко узнать размер vecor.

#include <vector>
vector<char> myVector;

void DoSomething(vector<char> &v)
{
    int sizeOfVector = v.size();
}
3
ответ дан 1 December 2019 в 06:05
поделиться

Вы не можете. Массивы в 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
}

Независимо от того, если Ваш параметр функции является символом [] или символом*, Вы не знаете размера.

я предлагаю передать размер в как отдельный параметр.

0
ответ дан 1 December 2019 в 06:05
поделиться

Еще одна опция, которую Вы имеете, создает строковый класс, который управляет строкой. Я уверен, что кто-то там уже сделал это. Самая примитивная версия является структурой с символом * и длина буфера, где необходимо вручную управлять размером каждый раз, когда это изменяется. Другой конец спектра является полностью реализованным строковым классом с перегрузкой оператора и функциями manupulation.

Затем передача этот класс к Вашей функции и это уже знает размер. Это действительно несколько не отличается затем передача его как отдельный параметр; это просто - более легкий способ управлять строками, если они - все различные длины.

0
ответ дан 1 December 2019 в 06:05
поделиться

int array_size = sizeof (Array) / sizeof (Array [0]);

2
ответ дан 1 December 2019 в 06:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: