Я пытался отладить мой код в другой функции, когда я наткнулся на это «странное» поведение.Матрица не заполнена нулевым объявлением
#include <stdio.h>
#define MAX 20
int main(void) {
int matrix[MAX][MAX] = {{0}};
return 0;
}
Если я поставил точку останова на return 0;
линии, и я смотрю на локальные переменные с Code :: Blocks матрица не полностью заполнена нулями. Первая строка есть, но остальная часть массива содержит только случайный мусор.
Я знаю, что может сделать двойной for
цикл инициализации вручную всего до нуля, но не был стандартным C
должен заполнить эту матрицу к нулю с {{0}}
инициализатором?
Возможно, потому что это был долгий день, и я устал, но я мог бы поклясться, что знаю это.
Я пытался компилировать с различными стандартами (с Code :: Blocks в комплекте gcc
компилятор): -std=c89
, -std=c99
, std=c11
но это то же самое.
Любые идеи о том, что не так? Не могли бы вы объяснить мне это?
EDIT: Я спрашиваю о инициализаторе {{0}}
.
Я всегда думал, что он заполнит все столбцы и все строки до нуля.
EDIT 2: Меня беспокоит именно Code::Blocks
и его комплект GCC
. Другие комментарии говорят, что код работает на разных платформах. Но почему это не работает для меня? :/
Спасибо.
хорошо этот ответ говорит, что вы делаете это правильно http://stackoverflow.com/a/1688758/1339987 – djechlin
Использование 2- что на самом деле это часто вызывает больше проблем, чем это стоит. Почему бы просто не использовать одномерный массив, где первые MAX-элементы считаются первой строкой, следующие MAX-элементы вторая строка и т. д. разыменование по матрице [строка * NCOLS + col]; в этом случае вы можете более портативно инициализировать его как просто матрицу [NCOLS * NROWS] = {0}; – Dmitri
@Dmitri, потому что вы должны принять первый MAX-элементы - это первая строка, математика, почтение с большей математикой - я полагаю, вы ответили на ваш вопрос: P – djechlin