아주 간단 해 보입니다. 유일한 원격으로 까다로운 비트는 동적으로 할당 된 배열에 포인터를 보유하는 유형입니다 :이 코드는 신중하게 배열의 모든 요소를 제로로 calloc()
을 사용
#include <stdlib.h>
#include <stdio.h>
static void print_matrix(int r, int c, int matrix[r][c])
{
for (int i = 0; i < r; i++)
{
for (int j = 0; j < c; j++)
printf(" %d", matrix[i][j]);
putchar('\n');
}
}
static void set_matrix(int r, int c, int matrix[r][c])
{
for (int i = 0; i < r; i++)
{
for (int j = 0; j < c; j++)
matrix[i][j] = (i+1) * 100 + j + 1;
}
}
int main(void)
{
size_t rows = 9;
size_t cols = 7;
size_t size = sizeof(int[rows][cols]);
printf("rows = %zu, cols = %zu, size = %zu\n", rows, cols, size);
int (*matrix)[cols] = calloc(sizeof(int[rows][cols]), 1);
if (matrix != 0)
{
set_matrix(rows, cols, matrix);
print_matrix(rows, cols, matrix);
free(matrix);
}
return 0;
}
하고 비 제로로 설정 set_matrix()
를 호출 값. 서면으로, malloc()
은 calloc()
보다 좋을 것이지만, 질문은 calloc()
을 사용하며이 코드와 함께 사용하는 것이 합리적이지는 않을 것입니다 (예 : if (i && j && i != j)
과 같은 set_matrix()
의 조건부 지정).
예 출력 :
rows = 9, cols = 7, size = 252
101 102 103 104 105 106 107
201 202 203 204 205 206 207
301 302 303 304 305 306 307
401 402 403 404 405 406 407
501 502 503 504 505 506 507
601 602 603 604 605 606 607
701 702 703 704 705 706 707
801 802 803 804 805 806 807
901 902 903 904 905 906 907
@ user3528438 ** 가변 길이 배열 데이터 유형에 대해 ** 특별히 ** 부탁드립니다. 게다가, 5D, 진지하게? –
5D에서 효과가있는 것은 2D에서 작동하도록 줄일 수 있습니다. 'calloc (sizeof (int [rows] [cols]), 1)'을 시도 했습니까? 어떤 크기를 얻었습니까? 실제로 더 관련이있는 것은'rows','cols'와'sizeof' 표현식의 값을 출력하는 것입니다. 그것은 당신에게 필요한 것을 제공합니까? 질문은 "나는 결과를 어떻게 할당 할까?" –
@ TomášZato 5D? 예, 진지하게! 왜 안돼? –