Hallo,
wir haben heute in der Schule in Informatik eine Aufgabe aufbekommen,
mit der ich nicht ganz zurechtkomme.
Die Aufgabe ist es in C eine 2D-Matrix um 90 Grad zu drehen
Bsp.:
1 | [[1, 2, 3], [[7, 4, 1],
|
2 | [4, 5, 6], -> [8, 5, 2],
|
3 | [7, 8, 9]] [9, 6, 3]]
|
Dazu haben wir noch eine Definition für arrays bekommen.
1 | typedef struct arr_##name {
|
2 | int size;
|
3 | type *arr;
|
4 | } arr_##name
|
5 |
|
6 | arr_##name alloc_arr_##name(int len){
|
7 | arr_##name a = {len, len > 0 ? malloc(sizeof(type) * len) : NULL};
|
8 | return a;
|
9 | }
|
10 |
|
11 |
|
12 | arr_arr_integer Rotation2D(arr_arr_integer a) {
|
13 |
|
14 | }
|
Die Aufgabe an sich habe ich schon verstanden, allerdings komme ich
nicht klar auf die einzelnen Werte zuzugreifen.
Normalerweise würde ich mit
den wert von a(0,0) holen (hier 1).
Aber hier bekomme ich eine fehlermeldung:
error: subsripted value is neither array nor pointer nor vector int x =
a[0][0];
Wie komme ich an den Wert 1 ran?
Wie funktioniert genau
1 | arr_##name a = {len, len > 0 ? malloc(sizeof(type) * len) : NULL};
|
Normalerweise kenne ich das mit dem Fragezeicheoperator nur mit einer
Bedingung. Jetzt steht vor der Bedingung allerdings noch einmal len. Was
bedeutet dies?
Das ## operator kenne ich bisher nur in dem zusammenhang, dass es zwei
Makroparameter miteinander verbindet. Aber hier habe ich es auch noch
nciht ganz verstanden, was es genau bewirkt.
Wäre super, wenn ihr mir bei der ein oder anderen Frage Hinweise geben
könntet
Felix