1 /* 2 * inparam.c 3 * 4 * Beispiel-Programm Eingabe-Parameter 5 * 6 * Autor: H.Drachenfels 7 * Erstellt am: 29.10.2022 8 */
9
10 #include <stdio.h>
11
12 struct date
13 {
14 int day;
15 const char *month;
16 int year;
17 };
18
19 typedef struct date date;
20
21 void print_int(int);
22 void print_string(const char *);
23 void print_int_array(int size, const int[]);
24 void print_date(const date *);
25 void print_int_array_array(int, const int[][2]);
26 void print_int_matrix(int, int, const int *);
27 void print_int_array_pointer(int, int, const int * const *);
28
29 int main(void)
30 {
31 int n = 10;
32 print_int(n);
33
34 const char* s = "Hallo"; // C++ verlangt const
35 print_string(s);
36
37 int a[2] = {10, 11};
38 print_int_array(2, a);
39
40 date d = {25, "Februar", 2011};
41 print_date(&d);
42
43 int aa[3][2] = {{10, 11}, {20, 21}, {30, 31}};
44 print_int_array_array(3, (const int(*)[2]) aa); // C verlangt cast
45 print_int_matrix(3, 2, &aa[0][0]);
46
47 int *ap[3] = {aa[0], aa[1], aa[2]};
48 print_int_array_pointer(3, 2, (const int * const *) ap); // C verlangt cast
49
50 return 0;
51 }
52
53
54 void print_int(int n)
55 {
56 printf("%d\n", n);
57 n = 0; // ok, lokale Variable
58 }
59
60
61 void print_string(const char *s)
62 {
63 printf("%s\n", s);
64 // s[0] = '\0'; Fehler, Zeiger auf konstante Zeichenkette
65 s = NULL; // ok, lokale Variable
66 }
67
68
69 void print_int_array(int size, const int a[])
70 {
71 printf("[ ");
72 for (int i = 0; i < size; ++i)
73 {
74 printf("%d ", a[i]);
75 }
76 printf("]\n");
77
78 // a[0] = 0; Fehler, Zeiger auf konstantes Array
79 a = NULL; // ok, lokale Variable
80 }
81
82
83 void print_date(const date *d)
84 {
85 printf("%d. %s %d\n", d->day, d->month, d->year);
86 // d->day = 0; Fehler, Zeiger auf konstanten Wert
87 }
88
89
90 void print_int_array_array(int n, const int xy[][2])
91 {
92 printf("[ ");
93 for (int i = 0; i < n; ++i)
94 {
95 printf("[ ");
96 for (int j = 0; j < 2; ++j)
97 {
98 printf("%d ", xy[i][j]);
99 }
100 printf("] ");
101 }
102 printf("]\n");
103
104 // xy[0][0] = 0; Fehler, Zeiger auf konstantes Array
105 // xy[0] = 0; Fehler, Zeiger auf zweidimensionales Array
106 xy = NULL; // ok, lokale Variable
107 }
108
109
110 void print_int_matrix(int n, int m, const int *xy)
111 {
112 printf("[ ");
113 for (int i = 0; i < n; ++i)
114 {
115 printf("[ ");
116 for (int j = 0; j < m; ++j)
117 {
118 printf("%d ", xy[i * m + j]);
119 }
120 printf("] ");
121 }
122 printf("]\n");
123
124 // xy[0] = 0; Fehler, Zeiger auf konstantes Array
125 xy = NULL; // ok, lokale Variable
126 }
127
128
129 void print_int_array_pointer(int n, int m, const int * const *xy)
130 {
131 printf("[ ");
132 for (int i = 0; i < n; ++i)
133 {
134 printf("[ ");
135 for (int j = 0; j < m; ++j)
136 {
137 printf("%d ", xy[i][j]);
138 }
139 printf("] ");
140 }
141 printf("]\n");
142
143 // xy[0][0] = 0; Fehler, Zeiger auf konst. Zeiger auf konst. Array
144 // xy[0] = 0; Fehler, Zeiger auf konstanten Zeiger
145 xy = NULL; // ok, lokale Variable
146 }
147