Ваше добавление в порядке, ваша printf
... печать (скорее всего, один за другим вашего 3-го ряда матрицы, вызывающего Не определеноПоведение ), см .: Стандарт C11 - 6.3.2.1 Другие операнды - L-значения, массивы и указатели функций (p3) для преобразования массив / указатель .
Предполагается, что у вас есть:
#define MAXCOLS100 100
где-нибудь. Вы пытаетесь напечатать элемент в mNx100[2][MAXCOLS100]
, который является одним после конца 3-го ряда вашей матрицы. (технически в самом 2D-массиве, но не разрешено обращаться таким образом)
Ваши допустимые индексы столбцов для 3-й строки начинаются с 0 -> MAXCOLS100-1
. Адрес mNx100[2][MAXCOLS100]
действителен для адресации конца 3-й строки, но не является правильным индексом для извлечения данных. (При доступе mNx100[2]
преобразуется в указатель на первый элемент в одномерном массиве int
с MAXCOLS100
элементами)
Вам нужно напечатать первые 3 элемента из первых 3-rows (остаток будет инициализирован нулем в силу вашей инициализации)
Простая матричная печать в вашем случае может быть:
void prnmtrx (int (*m)[MAXCOLS100], size_t rows, size_t cols)
{
size_t i, j;
for (i = 0; i < rows; i++) {
for (j = 0; j < cols; j++)
printf (j ? " %2d" : "%2d", m[i][j]);
putchar ('\n');
}
}
Где она вызывается с помощью:
prnmtrx (mNx100, 3, 3);
Полный пример:
#include <stdio.h>
#define MAXCOLS100 100
void sumrows (int mNx100[][MAXCOLS100], int lin1, int lin2, int lin3, int columns)
{
int i;
for (i = 0; i < columns; i++) {
mNx100[lin3][i] = mNx100[lin1][i] + mNx100[lin2][i];
}
}
void prnmtrx (int (*m)[MAXCOLS100], size_t rows, size_t cols)
{
size_t i, j;
for (i = 0; i < rows; i++) {
for (j = 0; j < cols; j++)
printf (j ? " %2d" : "%2d", m[i][j]);
putchar ('\n');
}
}
int main()
{
int mNx100[][MAXCOLS100] = {{1,2,3},{4,5,6},{7,8,9}};
sumrows (mNx100, 0, 1, 2, 3);
prnmtrx (mNx100, 3, 3);
return 0;
}
Пример использования / Вывод
$ ./bin/mtrxaddrows
1 2 3
4 5 6
5 7 9
Просмотрите все и дайте мне знать, если у вас естьдополнительные вопросы.