Ваше назначение в l oop инициализирует начальную диагональ:
(*p)[i] = i;
Чтобы проиллюстрировать, вот адаптация вашего кода, который печатает всю матрицу (и инициализирует ее):
#include <stdio.h>
#include <string.h>
#define NUM_ROWS 3
#define NUM_COLS 5
int main(void)
{
int a[NUM_ROWS][NUM_COLS], (*p)[NUM_COLS], i;
/* Set all elements to -1 assuming 2's complement */
memset(a, 0xFF, sizeof(a));
for (p = &a[0], i = 0; p < &a[NUM_ROWS]; p++, i++)
{
(*p)[i] = i;
}
for (i = 0; i < NUM_ROWS; i++)
{
for (int j = 0; j < NUM_COLS; j++)
printf("%3d", a[i][j]);
putchar('\n');
}
return 0;
}
Вывод:
0 -1 -1 -1 -1
-1 1 -1 -1 -1
-1 -1 2 -1 -1
Обратите внимание, что три элемента на передней диагонали установлены в 0, 1, 2, а остальные равны -1, как установлено memset()
.
Если вы хотите инициализировать первую строку, вы просто используете:
int (*p)[NUM_COLS] = &a[0];
for (int i = 0; i < NUM_COLS; i++)
(*p)[i] = i;
Или, проще говоря, забудьте о p
и используйте:
for (int i = 0; i < NUM_COLS; i++)
a[0][i] = i;
Если вы хотите инициализировать столбец 0, вам нужно:
(*p)[0] = i;
Или, еще проще, забудьте о p
и используйте:
for (int i = 0; i < NUM_ROWS; i++)
a[0][i] = i;