#c #arrays #initialization
#c #массивы #инициализация
Вопрос:
int M=7;
int N=6;
int i=0;
int x=N*M;
int val3[x] = {};
for(int i=0;i<x;i )
{
//some calculations
if (my condition)
{
//if this condition ok, change value of val[i]
}
cout << i << " " << val[i] << endl;
}
Я хочу инициализировать ноль array(val)
, я использовал приведенные выше коды, но я получил сообщение об ошибке, в котором говорится, что объект переменного размера, возможно, не инициализирован. невозможно ли инициализировать нулевой массив? нужна ваша помощь …. спасибо
Комментарии:
1. Следует отметить: у вас есть 2 переменные с именами
i
. Один в списке переменных в верхней части фрагмента и один в цикле for. Не уверен, компилируется ли он (вероятно, компилируется), но i в цикле маскирует другой. Вы должны исправить это.
Ответ №1:
C не включает массивы переменной длины; int val3[ x ]
с x
непостоянством — это особенность C99. Не все функции C99 являются частью C . Попробуйте использовать std::vector
.
#include <vector>
// contains an array of length x, automatically filled with zeroes
std::vector< int > val3( x );
Ответ №2:
int val3[x] = {};
C не позволяет инициализировать массивы переменной, которая не является константой времени компиляции. Используйте a const int
для всех переменных (кроме i
).
Кстати, вы не используете это первым int i
(вне цикла).
Ответ №3:
В качестве альтернативы std::vector, предложенному выше, вы также могли бы сделать:
int M=7;
int N=6;
int x=N*M;
int* val3 = new int[x];
memset(val3, 0, x * sizeof (int));
for (int i = 0; i < x; i )
{
// ...
}
// ...
delete [] val3;
Комментарии:
1. я использовал эти коды, но мои результаты показывают очень большие значения, я надеюсь, это из-за указателя (val3). как получить значение этого указателя?
2. Я полагаю, вы имеете в виду «как получить значения, на которые указывает этот указатель»? Если это так, то val3 [n] для n в [0, x-1] . например, для x = 3 у вас будет val3 [0], val3[1], val3 [2].
3. Итак, в вашем цикле, если вы просто используете cout << val3[i] << endl; , это должно вывести нули, если вы ничего больше не сделали между memset и cout;
4. нет, нет, внутри моего цикла я использовал свои вычисления, а затем проверил вывод в соответствии с заданным условием, затем, если мое условие выполнено, я хочу изменить 0 на результат. я уже выполнил свою часть вычисления. теперь я не хочу видеть свой вывод. итак, я использовал другой цикл for от 0 до конца этого массива, и использовал cout … но он показывает неправильные значения (memeory), так как же получить значение val3?
5. В моем memset была ошибка. memset присваивает некоторым байтам некоторое значение. Поскольку мы указываем на целые числа, нам нужно умножить x на количество байтов в int (т.Е. sizeof(int)). Теперь это должно сработать для вас.