diff --git a/20250325/arrays-and-pointers-06.xcf.gz b/20250325/arrays-and-pointers-06.xcf.gz index 1760ebb7faff5f86311184eee92963abcf22a637..cd908594db91e3efe94a710f48df8f24df33f32f 100644 Binary files a/20250325/arrays-and-pointers-06.xcf.gz and b/20250325/arrays-and-pointers-06.xcf.gz differ diff --git a/20250325/arrays-and-pointers-07.c b/20250325/arrays-and-pointers-07.c new file mode 100644 index 0000000000000000000000000000000000000000..b782932cf69c554609c9fee7333dc04038fa99e0 --- /dev/null +++ b/20250325/arrays-and-pointers-07.c @@ -0,0 +1,13 @@ +#include <stdio.h> + +int main (void) +{ + char a[] = "Test"; + char *p = "Test"; + printf ("%016zx %016zx %016zx %016zx\n", (size_t) &a, (size_t) a, (size_t) &p, (size_t) p); + p = a; // OK: Das Array selbst = Adresse eines Elements + printf ("%s\n", p); + p = &a; // Warnung: Adresse des Arrays (falscher Typ, aber dieselbe Adresse) + printf ("%s\n", p); + return 0; +} diff --git a/20250325/arrays-and-pointers-08.c b/20250325/arrays-and-pointers-08.c new file mode 100644 index 0000000000000000000000000000000000000000..fd6341e099fa519a66474969047ffffe49a228de --- /dev/null +++ b/20250325/arrays-and-pointers-08.c @@ -0,0 +1,12 @@ +#include <stdio.h> + +int main (void) +{ + char *a[] = { "Dies", "ist", "ein", "Test" }; + for (int i = 0; i < 4; i++) + printf ("%s\n", a[i]); + char **p = a; + for (int i = 0; i < 4; i++) + printf ("%s\n", p[i]); + return 0; +} diff --git a/20250325/arrays-and-pointers-08.png b/20250325/arrays-and-pointers-08.png new file mode 100644 index 0000000000000000000000000000000000000000..5d23472ddfa5b351d505f0f939135c7b84a2bcdb Binary files /dev/null and b/20250325/arrays-and-pointers-08.png differ diff --git a/20250325/arrays-and-pointers-09.c b/20250325/arrays-and-pointers-09.c new file mode 100644 index 0000000000000000000000000000000000000000..79a11aea6295fe7599901647640f4977b91af8e6 --- /dev/null +++ b/20250325/arrays-and-pointers-09.c @@ -0,0 +1,11 @@ +#include <stdio.h> + +int main (void) +{ + char *a[] = { "Dies", "ist", "ein", "Test" }; + for (int i = 0; i < 4; i++) + printf ("%s\n", a[i]); + for (char **p = a; p < a + 4; p++) + printf ("%s\n", *p); + return 0; +} diff --git a/20250325/arrays-and-pointers-10.c b/20250325/arrays-and-pointers-10.c new file mode 100644 index 0000000000000000000000000000000000000000..6e47dd62f7d2cd7fe6468b7593aa6e02ab928118 --- /dev/null +++ b/20250325/arrays-and-pointers-10.c @@ -0,0 +1,9 @@ +#include <stdio.h> + +int main (void) +{ + char a[][5] = { "Dies", "ist", "ein", "Test" }; + for (int i = 0; i < 4; i++) + printf ("%s\n", a[i]); + return 0; +} diff --git a/20250325/arrays-and-pointers-10.png b/20250325/arrays-and-pointers-10.png new file mode 100644 index 0000000000000000000000000000000000000000..8151769462d38a8034e79a58dabe657b0b0f3ad3 Binary files /dev/null and b/20250325/arrays-and-pointers-10.png differ diff --git a/20250325/arrays-and-pointers-11.c b/20250325/arrays-and-pointers-11.c new file mode 100644 index 0000000000000000000000000000000000000000..4eae96b54fa380888d5f33141d399ba7ac7eb8f7 --- /dev/null +++ b/20250325/arrays-and-pointers-11.c @@ -0,0 +1,10 @@ +#include <stdio.h> + +int main (void) +{ + char a[][5] = { "Dies", "ist", "ein", "Test" }; + char **p = a; + for (int i = 0; i < 4; i++) + printf ("%s\n", p[i]); + return 0; +} diff --git a/20250325/arrays-and-pointers-12.c b/20250325/arrays-and-pointers-12.c new file mode 100644 index 0000000000000000000000000000000000000000..225ec92f4eb63faaf7610a2428522f9eec293812 --- /dev/null +++ b/20250325/arrays-and-pointers-12.c @@ -0,0 +1,10 @@ +#include <stdio.h> + +int main (void) +{ + char a[][5] = { "Dies", "ist", "ein", "Test" }; + char *p = a; + for (int i = 0; i < 4; i++) + printf ("%s\n", p[i]); + return 0; +} diff --git a/20250325/arrays-and-pointers-13.c b/20250325/arrays-and-pointers-13.c new file mode 100644 index 0000000000000000000000000000000000000000..a22d4aac33bee9e837c2c0aeafc53e297f487884 --- /dev/null +++ b/20250325/arrays-and-pointers-13.c @@ -0,0 +1,10 @@ +#include <stdio.h> + +int main (void) +{ + char a[][5] = { "Dies", "ist", "ein", "Test" }; + char *p = a; + for (int i = 0; i < 4; i++) + printf ("%s\n", &p[i]); + return 0; +} diff --git a/20250325/arrays-and-pointers-14.c b/20250325/arrays-and-pointers-14.c new file mode 100644 index 0000000000000000000000000000000000000000..212508cb3a67f96cd3315b95598bfb422196c7e1 --- /dev/null +++ b/20250325/arrays-and-pointers-14.c @@ -0,0 +1,10 @@ +#include <stdio.h> + +int main (void) +{ + char a[][5] = { "Dies", "ist", "ein", "Test" }; + char *p = a; + for (int i = 0; i < 4; i++) + printf ("%s\n", &p[5 * i]); + return 0; +} diff --git a/20250325/arrays-and-pointers-15.c b/20250325/arrays-and-pointers-15.c new file mode 100644 index 0000000000000000000000000000000000000000..23db967927b2175c37096523a854a79980ff6185 --- /dev/null +++ b/20250325/arrays-and-pointers-15.c @@ -0,0 +1,9 @@ +#include <stdio.h> + +int main (void) +{ + char a[][5] = { "Dies", "ist", "ein", "Test" }; + for (char *p = a; p < a + 20; p += 5) + printf ("%s\n", p); + return 0; +} diff --git a/20250325/arrays-and-pointers-16.c b/20250325/arrays-and-pointers-16.c new file mode 100644 index 0000000000000000000000000000000000000000..b06bb2155e2646b76f0333a528ca34eaaf1a6470 --- /dev/null +++ b/20250325/arrays-and-pointers-16.c @@ -0,0 +1,9 @@ +#include <stdio.h> + +int main (void) +{ + char a[][5] = { "Dies", "ist", "ein", "Test" }; + for (char *p = a; p < a + 4; p += 5) + printf ("%s\n", p); + return 0; +} diff --git a/20250325/arrays-and-pointers-17.c b/20250325/arrays-and-pointers-17.c new file mode 100644 index 0000000000000000000000000000000000000000..7182af45cc97e4095fb49366655dcb35e3f50ab4 --- /dev/null +++ b/20250325/arrays-and-pointers-17.c @@ -0,0 +1,9 @@ +#include <stdio.h> + +int main (void) +{ + char a[][5] = { "Dies", "ist", "ein", "Test" }; + for (char *p = (char *) a; p < (char *) a + 20; p += 5) + printf ("%s\n", p); + return 0; +} diff --git a/20250325/arrays-and-pointers-18.c b/20250325/arrays-and-pointers-18.c new file mode 100644 index 0000000000000000000000000000000000000000..993619fd21a50bc6aa47155dae0019a11c0f0be4 --- /dev/null +++ b/20250325/arrays-and-pointers-18.c @@ -0,0 +1,10 @@ +#include <stdio.h> + +int main (void) +{ + typedef char string5[5]; + string5 a[] = { "Dies", "ist", "ein", "Test" }; + for (string5 *p = a; p < a + 4; p++) + printf ("%s\n", p); + return 0; +} diff --git a/20250325/arrays-and-pointers-19.c b/20250325/arrays-and-pointers-19.c new file mode 100644 index 0000000000000000000000000000000000000000..e4c8438ab6ceded22f37562280a331f33f572f6f --- /dev/null +++ b/20250325/arrays-and-pointers-19.c @@ -0,0 +1,10 @@ +#include <stdio.h> + +int main (void) +{ + typedef char string5[5]; + string5 a[] = { "Dies", "ist", "ein", "Test" }; + for (string5 *p = a; p < a + 4; p++) + printf ("%s\n", &p[0]); + return 0; +} diff --git a/20250325/arrays-and-pointers-20.c b/20250325/arrays-and-pointers-20.c new file mode 100644 index 0000000000000000000000000000000000000000..bdca566e1db911f43f2455525337f360139ad2a0 --- /dev/null +++ b/20250325/arrays-and-pointers-20.c @@ -0,0 +1,10 @@ +#include <stdio.h> + +int main (void) +{ + typedef char string5[5]; + string5 a[] = { "Dies", "ist", "ein", "Test" }; + for (string5 *p = a; p < a + 4; p++) + printf ("%s\n", &(p[0])); + return 0; +} diff --git a/20250325/arrays-and-pointers-21.c b/20250325/arrays-and-pointers-21.c new file mode 100644 index 0000000000000000000000000000000000000000..ac953cb1b9f3f6baf9d617299df05a84f46bce34 --- /dev/null +++ b/20250325/arrays-and-pointers-21.c @@ -0,0 +1,10 @@ +#include <stdio.h> + +int main (void) +{ + typedef char string5[5]; + string5 a[] = { "Dies", "ist", "ein", "Test" }; + for (string5 *p = a; p < a + 4; p++) + printf ("%s\n", &p[0][0]); + return 0; +} diff --git a/20250325/arrays-and-pointers-22.c b/20250325/arrays-and-pointers-22.c new file mode 100644 index 0000000000000000000000000000000000000000..d0247f96992e6947442bbdfca7c64b4925447e49 --- /dev/null +++ b/20250325/arrays-and-pointers-22.c @@ -0,0 +1,10 @@ +#include <stdio.h> + +int main (void) +{ + typedef char string5[5]; + string5 a[] = { "Dies", "ist", "ein", "Test" }; + for (string5 *p = a; p < a + 4; p++) + printf ("%s\n", &**p); + return 0; +} diff --git a/20250325/arrays-and-pointers-23.c b/20250325/arrays-and-pointers-23.c new file mode 100644 index 0000000000000000000000000000000000000000..5c9ef452b42b06f1eafd5928dc55f0841d4c0f02 --- /dev/null +++ b/20250325/arrays-and-pointers-23.c @@ -0,0 +1,10 @@ +#include <stdio.h> + +int main (void) +{ + typedef char string5[5]; + string5 a[] = { "Dies", "ist", "ein", "Test" }; + for (string5 *p = a; p < a + 4; p++) + printf ("%s\n", *p); + return 0; +} diff --git a/20250325/arrays-and-pointers-24.c b/20250325/arrays-and-pointers-24.c new file mode 100644 index 0000000000000000000000000000000000000000..29f0c8ced7258994f0a2681052e4b7f8b51a0b14 --- /dev/null +++ b/20250325/arrays-and-pointers-24.c @@ -0,0 +1,10 @@ +#include <stdio.h> + +int main (void) +{ + typedef char string5[5]; + string5 *p = { "Dies", "ist", "ein", "Test" }; + for (int i = 0; i < 4; i++) + printf ("%s\n", p[i]); + return 0; +} diff --git a/20250325/arrays-and-pointers-24.txt b/20250325/arrays-and-pointers-24.txt new file mode 100644 index 0000000000000000000000000000000000000000..d6bcad5db5991e66a7e43f33d0869f408b60ecda --- /dev/null +++ b/20250325/arrays-and-pointers-24.txt @@ -0,0 +1,41 @@ +#include <stdio.h> + +int main (void) +{ + typedef char string5[5]; + string5 *p = { "Dies", "ist", "ein", "Test" }; + for (int i = 0; i < 4; i++) + printf ("%s\n", p[i]); + return 0; +} +cassini/home/peter/bo/2025ss/ad/20250325> gcc -Wall -O3 arrays-and-pointers-24.c +arrays-and-pointers-24.c: In function ‘main’: +arrays-and-pointers-24.c:6:18: warning: initialization of ‘char (*)[5]’ from incompatible pointer type ‘char *’ [-Wincompatible-pointer-types] + 6 | string5 *p = { "Dies", "ist", "ein", "Test" }; + | ^~~~~~ +arrays-and-pointers-24.c:6:18: note: (near initialization for ‘p’) +arrays-and-pointers-24.c:6:26: warning: excess elements in scalar initializer + 6 | string5 *p = { "Dies", "ist", "ein", "Test" }; + | ^~~~~ +arrays-and-pointers-24.c:6:26: note: (near initialization for ‘p’) +arrays-and-pointers-24.c:6:33: warning: excess elements in scalar initializer + 6 | string5 *p = { "Dies", "ist", "ein", "Test" }; + | ^~~~~ +arrays-and-pointers-24.c:6:33: note: (near initialization for ‘p’) +arrays-and-pointers-24.c:6:40: warning: excess elements in scalar initializer + 6 | string5 *p = { "Dies", "ist", "ein", "Test" }; + | ^~~~~~ +arrays-and-pointers-24.c:6:40: note: (near initialization for ‘p’) +arrays-and-pointers-24.c:8:22: warning: array subscript 10 is outside array bounds of ‘char[5]’ [-Warray-bounds] + 8 | printf ("%s\n", p[i]); + | ^ +arrays-and-pointers-24.c:8:22: warning: array subscript 15 is outside array bounds of ‘char[5]’ [-Warray-bounds] +arrays-and-pointers-24.c:8:22: warning: offset ‘5’ outside bounds of constant string [-Warray-bounds] +arrays-and-pointers-24.c:8:22: warning: offset ‘10’ outside bounds of constant string [-Warray-bounds] +arrays-and-pointers-24.c:8:22: warning: offset ‘15’ outside bounds of constant string [-Warray-bounds] +cassini/home/peter/bo/2025ss/ad/20250325> ./a.out +Dies + +;( + +cassini/home/peter/bo/2025ss/ad/20250325> diff --git a/20250325/arrays-and-pointers-25.c b/20250325/arrays-and-pointers-25.c new file mode 100644 index 0000000000000000000000000000000000000000..f0a4b2c05cbcd9c9b428046b212d850f3e0ca73d --- /dev/null +++ b/20250325/arrays-and-pointers-25.c @@ -0,0 +1,10 @@ +#include <stdio.h> + +int main (void) +{ + typedef char string8[8]; + string8 *p = { "Dies", "ist", "ein", "Test" }; + for (int i = 0; i < 4; i++) + printf ("%s\n", p[i]); + return 0; +} diff --git a/20250325/arrays-and-pointers-25.s b/20250325/arrays-and-pointers-25.s new file mode 100644 index 0000000000000000000000000000000000000000..99de75a0a35bb679359c1ca9bb800b92444f8e82 --- /dev/null +++ b/20250325/arrays-and-pointers-25.s @@ -0,0 +1,31 @@ + .file "arrays-and-pointers-25.c" + .text + .section .rodata.str1.1,"aMS",@progbits,1 +.LC0: + .string "Dies" + .section .text.startup,"ax",@progbits + .p2align 4 + .globl main + .type main, @function +main: +.LFB11: + .cfi_startproc + subq $8, %rsp + .cfi_def_cfa_offset 16 + leaq .LC0(%rip), %rdi + call puts@PLT + leaq 8+.LC0(%rip), %rdi + call puts@PLT + leaq 16+.LC0(%rip), %rdi + call puts@PLT + leaq 24+.LC0(%rip), %rdi + call puts@PLT + xorl %eax, %eax + addq $8, %rsp + .cfi_def_cfa_offset 8 + ret + .cfi_endproc +.LFE11: + .size main, .-main + .ident "GCC: (Debian 12.2.0-14) 12.2.0" + .section .note.GNU-stack,"",@progbits diff --git a/20250325/arrays-and-pointers.ChangeLog b/20250325/arrays-and-pointers.ChangeLog new file mode 100644 index 0000000000000000000000000000000000000000..7c1e99a7565b7cc08d08adf3107da0f3b542cb4e --- /dev/null +++ b/20250325/arrays-and-pointers.ChangeLog @@ -0,0 +1,15 @@ +Version 1: + + Neues Programm: Array von Strings ausgeben + +Version 2: + + Nicht mehr Strings ausgeben, sondern die Adressen. + +Version 3: + + Adressen nicht mit %d ausgeben, sondern mit %z + +[14:33:29] (Kanal) kriexinger: +https://semver.org/lang/de/ Diese Art Versionierung ist ganz gut, finde ich. +Wenn man es manuell machen wil....