1 /* 2 * mem2.c 3 * klin, Wed Dec 17 15:08:57 1997 4 * Speicherabbildung von Feldern und Strings 5 */ 6 7 #include <stdio.h> 8 #include <ctype.h> 9 10 #define N 2 11 #define M 8 12 #define byte unsigned char 13 14 char a1[N][M] = { 15 { 'a', '1', '-', '1', '\0' }, 16 { 'a', '1', '-', '2', '\0' }, 17 }; 18 19 char a2[N][M] = { 20 "a2-1", 21 "a2-2", 22 }; 23 24 char *a3[N] = { 25 "a3-1", 26 "a3-2", 27 }; 28 29 void puthex(byte *, int); 30 31 void main(void) 32 { 33 int i; 34 35 printf("Speicherabbildung von Feldern und Strings\n\n"); 36 37 printf("a1 a = %p/%p s = %d\n", a1, &a1, sizeof(a1)); 38 puthex((byte *) a1, sizeof(a1)); 39 for (i = 0; i < N; i++) 40 printf("a1(%d) = %p/%p \"%s\"\n", i, a1[i], &a1[i], a1[i]); 41 42 printf("a2 a = %p/%p s = %d\n", a2, &a2, sizeof(a2)); 43 puthex((byte *) a2, sizeof(a2)); 44 for (i = 0; i < N; i++) 45 printf("a2(%d) = %p/%p \"%s\"\n", i, a2[i], &a2[i], a2[i]); 46 47 printf("a3 a = %p/%p s = %d\n", a3, &a3, sizeof(a3)); 48 puthex((byte *) a3, sizeof(a3)); 49 for (i = 0; i < N; i++) 50 printf("a3(%d) = %p/%p \"%s\"\n", i, a3[i], &a3[i], a3[i]); 51 for (i = 0; i < N; i++) 52 puthex((byte *) a3[i], 8); 53 54 } /* main() */ 55 56 void puthex(byte *s, int n) 57 { 58 int i; 59 60 for (i = 0; i < n; i++) { 61 printf("%02x", s[i]); 62 } 63 printf("\n"); 64 for (i = 0; i < n; i++) { 65 printf("%2c", isprint(s[i]) ? s[i] : '.'); 66 } 67 printf("\n"); 68 69 } /* puthex() */