1 /*
2 *
matrixpointer.c
3 *
4 * Beispiel-Programm Matrix als Feld von Feldern.
5 * Siehe zum Vergleich matrixpointerpointer.c
6 *
7 * Autor: H.Drachenfels
8 * Erstellt am: 29.10.2022
9 */
10
11 #include <stdio.h>
12 #include <stdlib.h>
13
14 #define M 3 // number of columns
15
16 int main(void)
17 {
18 //--------------------- allocate and initialize memory for 2x3-matrix
19 const int n = 2; // number of lines
20 int (*matrix)[M] = (int(*)[M]) malloc(n * sizeof (int[M]));
21 if (matrix == NULL)
22 {
23 printf("Speicherallokierungsfehler\n");
24 return 1;
25 }
26
27 matrix[0][0] = 10;
28 matrix[0][1] = 11;
29 matrix[0][2] = 12;
30 matrix[1][0] = 20;
31 matrix[1][1] = 21;
32 matrix[1][2] = 22;
33
34 //--------------------------------- print matrix addresses and values
35 printf("&matrix = %p\n", (void*) &matrix);
36 printf("matrix = %p\n", (void*) matrix);
37
38 for (int i = 0; i < n; ++i)
39 {
40 printf("[%d] %p: %p\n", i, (void*) &matrix[i], (void*) matrix[i]);
41
42 for (int j = 0; j < M; ++j)
43 {
44 printf(" [%d] %p: %d\n", j, (void*) &matrix[i][j], matrix[i][j]);
45 }
46 }
47
48 //------------------------------------------------- print matrix size
49 printf("sizeof matrix = %zu\n", sizeof matrix);
50 printf("%d * sizeof *matrix = %zu\n", n, n * sizeof *matrix);
51
52 free(matrix);
53 return 0;
54 }
55