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