C-Kurs 2011: Arrays, Strings, Pointer

Größe: px
Ab Seite anzeigen:

Download "C-Kurs 2011: Arrays, Strings, Pointer"

Transkript

1 C-Kurs 2011: Arrays, Strings, Pointer 15. September 2011 v This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 License.

2 Ohne Pointer geht nichts. 2

3 Pointer sind Grundlage für: Arrays Strings Call by Reference Komplexe Datentypen 3

4 Themen Hello Pointer Call by Reference Pointer auf Pointer Vom Pointer zum Array Pointer-Arithmetik Strings, Längencodierung, String API Const Correctness Initialisierung von Strings Mehrdimensionale Arrays Programm-Argumente: argc und argv Weiterführende Themen Zusammenfassung 4

5 Was ist ein Pointer? 5

6 Pointer kann meinen eine... A) B) 6

7 Pointer kann meinen eine... A) Adresse B) 7

8 Pointer kann meinen eine... A) Adresse B) Variable, die eine Adresse speichert 8

9 Hello Pointer

10 10 Hello Pointer #include <stdio.h> int main() { } return 0;

11 11 Hello Pointer #include <stdio.h> int main() { int i = 3; } return 0;

12 12 Hello Pointer #include <stdio.h> int main() { int i = 3; int * p = &i; } return 0;

13 13 Hello Pointer #include <stdio.h> int main() { int i = 3; int * p = &i; *p = 4; } return 0;

14 14 Hello Pointer #include <stdio.h> int main() { int i = 3; int * p = &i; *p = 4; p = 5; } return 0;

15 15 Hello Pointer #include <stdio.h> int main() { int i = 3; int * p = &i; printf( i == %d, p == %p\n, i, p); *p = 4; printf( i == %d, p == %p\n, i, p); p = 5; printf( i == %d, p == %p\n, i, p); } return 0;

16 16 Ausgabe # gcc hello_pointer.c -o hello_pointer

17 17 Ausgabe # gcc hello_pointer.c -o hello_pointer #./hello_pointer

18 18 Ausgabe # gcc hello_pointer.c -o hello_pointer #./hello_pointer i == 3, p == 0xbfa3ad8c

19 19 Ausgabe # gcc hello_pointer.c -o hello_pointer #./hello_pointer i == 3, p == 0xbfa3ad8c *p = 4;

20 20 Ausgabe # gcc hello_pointer.c -o hello_pointer #./hello_pointer i == 3, p == 0xbfa3ad8c *p = 4; i == 4, p == 0xbfa3ad8c

21 21 Ausgabe # gcc hello_pointer.c -o hello_pointer #./hello_pointer i == 3, p == 0xbfa3ad8c *p = 4; i == 4, p == 0xbfa3ad8c p = 5;

22 22 Ausgabe # gcc hello_pointer.c -o hello_pointer #./hello_pointer i == 3, p == 0xbfa3ad8c *p = 4; i == 4, p == 0xbfa3ad8c p = 5; i == 4, p == 0x5

23 23 Zusammenfassung 1/2 Operator & liefert eine Adresse

24 Zusammenfassung 1/2 Operator & liefert eine Adresse Operator * folgt einer Adresse (er dereferenziert) 24

25 Zusammenfassung 1/2 Operator & liefert eine Adresse Operator * folgt einer Adresse (er dereferenziert) & und * sind komplementär; es gilt: *(&x) = x = &(*x) 25

26 26 Zusammenfassung 2/2 Pointer zeigen auf typisierte Daten: int * char *

27 Call by Reference

28 Call by Reference #include <stdio.h> int main() { int i = 0; } return 0; 28

29 Call by Reference #include <stdio.h> int main() { int i = 0; by_value(i); } return 0; 29

30 Call by Reference #include <stdio.h> int main() { int i = 0; by_value(i); by_reference(&i); } return 0; 30

31 Call by Reference #include <stdio.h> void by_value (int x) { x += 3; } void by_reference(int * x) { *x += 4; } int main() { int i = 0; by_value(i); by_reference(&i); } return 0; 31

32 Call by Reference #include <stdio.h> void by_value (int x) { x += 3; } void by_reference(int * x) { *x += 4; } int main() { int i = 0; by_value(i); printf( i == %d\n, i); by_reference(&i); printf( i == %d\n, i); } return 0; 32

33 33 Ausgabe # gcc call_by_reference.c \ -o call_by_reference

34 34 Ausgabe # gcc call_by_reference.c \ -o call_by_reference #./call_by_reference

35 35 Ausgabe # gcc call_by_reference.c \ -o call_by_reference #./call_by_reference i == 0 i == 4

36 Pointer auf Pointer

37 37 Anwendungen Mehrdimensionale Arrays

38 Anwendungen Mehrdimensionale Arrays Call by Reference von Pointern 38

39 39 man strtod STRTOD(3) Linux Programmer s Manual STRTOD(3) NAME strtod, strtof, strtold - convert ASCII string to floating-point number SYNOPSIS #include <stdlib.h>... double strtod(const char *nptr, char **endptr); float strtof(const char *nptr, char **endptr);

40 40 man strtod STRTOD(3) Linux Programmer s Manual STRTOD(3) NAME strtod, strtof, strtold - convert ASCII string to floating-point number SYNOPSIS #include <stdlib.h>... double strtod(const char *nptr, char **endptr); float strtof(const char *nptr, char **endptr);

41 41 Pointer auf Pointer int i = 3; int * p = &i;

42 42 Pointer auf Pointer int i = 3; int * p = &i; int ** pp = &p;

43 Variablen im RAM 0 RAM int i int ** pp int * p ³²-1 43

44 Vom Pointer zum Array

45 45 Vom Pointer zum Array #include <stdio.h> int main() { } return 0;

46 46 Vom Pointer zum Array #include <stdio.h> void dump(const int * data, int count) { } int main() { } return 0;

47 47 Vom Pointer zum Array #include <stdio.h> void dump(const int * data, int count) { int i = 0; for (; i < count; i++) { } } int main() { } return 0;

48 48 Vom Pointer zum Array #include <stdio.h> void dump(const int * data, int count) { int i = 0; for (; i < count; i++) { printf( Field %d: %d\n, i + 1, *(data + i)); } } int main() { } return 0;

49 49 Vom Pointer zum Array #include <stdio.h> void dump(const int * data, int count) { int i = 0; for (; i < count; i++) { printf( Field %d: %d\n, i + 1, data[i]); } } int main() { } return 0;

50 50 Vom Pointer zum Array #include <stdio.h> void dump(const int * data, int count) { int i = 0; for (; i < count; i++) { printf( Field %d: %d\n, i + 1, data[i]); } } int main() { int const primes[] = {2, 3, 5, 7, 11}; } return 0;

51 51 Vom Pointer zum Array #include <stdio.h> void dump(const int * data, int count) { int i = 0; for (; i < count; i++) { printf( Field %d: %d\n, i + 1, data[i]); } } int main() { int const primes[] = {2, 3, 5, 7, 11}; dump(primes, 5); return 0; }

52 52 Vom Pointer zum Array #include <stdio.h> void dump(const int * data, int count) { int i = 0; for (; i < count; i++) { printf( Field %d: %d\n, i + 1, data[i]); } } int main() { int const primes[] = {2, 3, 5, 7, 11}; dump(primes, sizeof(primes) / sizeof(int)); return 0; }

53 53 Vom Pointer zum Array #include <stdio.h> void dump(const int * data, int count) { int i = 0; for (; i < count; i++) { printf( Field %d: %d\n, i + 1, data[i]); } } int main() { int const primes[] = {2, 3, 5, 7, 11, 13, 17}; dump(primes, sizeof(primes) / sizeof(int)); return 0; }

54 54 Zusammenfassung (1/5) Array-Zugriff via [k ] ähnlich Java

55 55 Zusammenfassung (2/5) Array = Pointer auf das erste Element

56 56 Zusammenfassung (3/5) a [k ] = *(a + k )

57 57 Zusammenfassung (4/5) sizeof(variable ) = Von variable belegter Speicher in Byte

58 58 Zusammenfassung (5/5) sizeof(type ) = Von type -Instanzen belegter Speicher in Byte

59 Pointer-Arithmetik

60 60 Pointer-Arithmetik int numbers[3]; char text[] = software libre ;

61 61 Pointer-Arithmetik int numbers[3]; char text[] = software libre ; Es gilt: 1. numbers[i] = *(numbers + i) 2. 3.

62 62 Pointer-Arithmetik int numbers[3]; char text[] = software libre ; Es gilt: 1. numbers[i] = *(numbers + i) 2. text[j] = *(text + j) 3.

63 63 Pointer-Arithmetik int numbers[3]; char text[] = software libre ; Es gilt: 1. numbers[i] = *(numbers + i) 2. text[j] = *(text + j) 3. sizeof(char) sizeof(int)

64 64 Pointer-Arithmetik int numbers[3]; char text[] = software libre ; Es gilt: 1. numbers[i] = *(numbers + i) 2. text[j] = *(text + j) 3. sizeof(char) sizeof(int) Für Operatoren +/- auf Pointern folgt daher:

65 65 Pointer-Arithmetik int numbers[3]; char text[] = software libre ; Es gilt: 1. numbers[i] = *(numbers + i) 2. text[j] = *(text + j) 3. sizeof(char) sizeof(int) Für Operatoren +/- auf Pointern folgt daher: Sprungweite variiert mit dem Typen!

66 Strings

67 67 Längencodierung Pascal Strings ABC { 3, 65, 66, 67 }

68 68 Längencodierung Pascal Strings ABC { 3, 65, 66, 67 } C Strings ABC { 65, 66, 67, 0 }

69 69 Strings ABC

70 70 Strings ABC { 65, 66, 67, 0 }

71 71 Strings ABC { 65, 66, 67, 0 } 012

72 72 Strings ABC { 65, 66, 67, 0 } 012 { 48, 49, 50, 0 }

73 73 Strings ABC { 65, 66, 67, 0 } 012 { 48, 49, 50, 0 } 012\0

74 74 Strings ABC { 65, 66, 67, 0 } 012 { 48, 49, 50, 0 } 012\0 { 48, 49, 50, 0, 0 }

75 75 Strings ABC { 65, 66, 67, 0 } 012 { 48, 49, 50, 0 } 012\0 { 48, 49, 50, 0, 0 } #include <string.h>... strlen( ABC\0\0 );

76 76 Strings ABC { 65, 66, 67, 0 } 012 { 48, 49, 50, 0 } 012\0 { 48, 49, 50, 0, 0 } #include <string.h>... strlen( ABC\0\0 ); = 3

77 77 my_strlen int my_strlen(const char * str) { } return ( );

78 78 my_strlen int my_strlen(const char * str) { char const * const begin = str; } return ( );

79 79 my_strlen int my_strlen(const char * str) { char const * const begin = str; while (*str) { str++; } return ( ); }

80 80 my_strlen int my_strlen(const char * str) { char const * const begin = str; while (*str) { str++; } return (str - begin); }

81 String API

82 82 String API (Auszug) Vergleich Suche Formatierung, Verkettung Auswertung, Analyse Clonen

83 83 String API (Auszug) Vergleich strcmp, strncmp, strcasecmp Suche strstr, strchr Formatierung, Verkettung snprintf Auswertung, Analyse strtol, sscanf Clonen strdup

84 84 Manpages # man string # man string.h # man stdio.h # man stdlib.h

85 85 Bitte vermeiden: atoi, atol, atoll, atoq gets scanf, fscanf,... mit %s sprintf, vsprintf strcat strcpy, strncpy

86 gets scanf, fscanf, sscanf,... mit %s sprintf, vsprintf strcat strcpy Buffer-Overflows Besser: snprintf, vsnprintf, fgets 86

87 87 Beispiel scanf mit %s #include <stdio.h> void main() { char text[3]; scanf( %s, text); }

88 88 Beispiel scanf mit %s #include <stdio.h> void main() { char text[3]; scanf( %s, text); } Buffer-Overflow für strlen(input ) 3

89 Beispiel scanf mit %s #include <stdio.h> void main() { char text[3]; scanf( %s, text); } Buffer-Overflow für strlen(input ) 3 # echo /crash Segmentation fault 89

90 Beispiel scanf mit %s #include <stdio.h> void main() { char text[3]; scanf( %s, text); /* Richtig: %3s */ } Buffer-Overflow für strlen(input ) 3 # echo /crash Segmentation fault 90

91 91 Beispiel sprintf void log_error(const char * error) { char text[256]; sprintf(text, ERROR: %s, error); log_message(text); }

92 92 Beispiel sprintf void log_error(const char * error) { char text[256]; sprintf(text, ERROR: %s, error); log_message(text); } Buffer-Overflow für strlen(error) > = 248

93 93 Beispiel sprintf void log_error(const char * error) { char text[256]; sprintf(text, ERROR: %s, error); log_message(text); } Buffer-Overflow für strlen(error) > = 248 (Halbherzige) Abhilfe: snprintf(text, sizeof(text),...);

94 94 strncpy Nullterminator nicht garantiert Besser: snprintf

95 Beispiel strncpy char text[5]; strncpy(text, Test, sizeof(text)); 95

96 Beispiel strncpy char text[5]; strncpy(text, Test, sizeof(text)); schreibt { 84, 101, 115, 116, 0 } 96

97 Beispiel strncpy char text[5]; strncpy(text, Test, sizeof(text)); schreibt { 84, 101, 115, 116, 0 } strncpy(text, Hallo, sizeof(text)); 97

98 Beispiel strncpy char text[5]; strncpy(text, Test, sizeof(text)); schreibt { 84, 101, 115, 116, 0 } strncpy(text, Hallo, sizeof(text)); schreibt { 72, 97, 108, 108, 111 } nicht nullterminiert 98

99 Beispiel strncpy char text[5]; strncpy(text, Test, sizeof(text)); schreibt { 84, 101, 115, 116, 0 } strncpy(text, Hallo, sizeof(text)); schreibt { 72, 97, 108, 108, 111 } nicht nullterminiert snprintf(text, sizeof(text), %s, Hallo ); 99

100 Beispiel strncpy char text[5]; strncpy(text, Test, sizeof(text)); schreibt { 84, 101, 115, 116, 0 } strncpy(text, Hallo, sizeof(text)); schreibt { 72, 97, 108, 108, 111 } nicht nullterminiert snprintf(text, sizeof(text), %s, Hallo ); schreibt { 72, 97, 108, 108, 0 } 100

101 atoi atol atoll atoq Fehlerbehandlung fehlt Besser: strtol, strtoll 101

102 102 Beispiel atoi atoi( Hallo ) 0 atoi( 0 ) 0

103 103 Beispiel atoi atoi( Hallo ) 0 atoi( 0 ) 0 Problem: atoi(s ) = 0 s =?

104 104 Beispiel atoi atoi( Hallo ) 0 atoi( 0 ) 0 Problem: atoi(s ) = 0 s =? Idee: Vorher s mit 0 vergleichen?

105 105 Beispiel atoi atoi( 2 ) 2 atoi( 0002 ) 2 atoi( +2 ) 2 atoi( 2 ) 2 atoi( 2Hallo ) 2

106 Ausweg strtol #include <stdlib.h> #include <string.h> int str_to_long(const char * text, long * output) { char * end; long number = strtol(text, &end, 10); if ((end!= text) && (*end == \0 )) { *output = number; return 1; } return 0; } 106

107 Const Correctness

108 108 Const Correctness (1/6) Modifikator const verbietet Schreibzugriff

109 109 Const Correctness (2/6) int foo;

110 110 Const Correctness (2/6) const int foo;

111 111 Const Correctness (2/6) int const foo;

112 112 Const Correctness (3/6) int * foo;

113 113 Const Correctness (3/6) int * foo; <1>

114 114 Const Correctness (3/6) int * foo; <2a> <2b> <1>

115 115 Const Correctness (4/6) <1> int * const foo;

116 116 Const Correctness (4/6) <1> int * const foo; Verboten: foo =...;

117 117 Const Correctness (4/6) <1> int * const foo; Verboten: foo =...; <2a> const int * foo; <2b> int const * foo;

118 118 Const Correctness (4/6) <1> int * const foo; Verboten: foo =...; <2a> const int * foo; <2b> int const * foo; Verboten: foo[0] =...;

119 119 Const Correctness (5/6) <2a,1> const int * const foo; <2b,1> int const * const foo;

120 120 Const Correctness (5/6) <2a,1> const int * const foo; <2b,1> int const * const foo; Verboten: foo =...; foo[0] =...;

121 121 Const Correctness (6/6) const int * const * foo;

122 122 Const Correctness (6/6) const int * const * foo; Erlaubt: foo =...;

123 123 Const Correctness (6/6) const int * const * foo; Erlaubt: foo =...; Verboten: foo[0] =...; foo[0][0] =...;

124 124 Const Correctness in APIs int my_strlen( char * str); int my_strlen(const char * str);

125 125 Const Correctness in APIs int my_strlen( char * str); Funktion darf Inhalt von str verändern int my_strlen(const char * str);

126 126 Const Correctness in APIs int my_strlen( char * str); Funktion darf Inhalt von str verändern my_strlen( ABC ) gibt Compile-Fehler int my_strlen(const char * str);

127 127 Const Correctness in APIs int my_strlen( char * str); Funktion darf Inhalt von str verändern my_strlen( ABC ) gibt Compile-Fehler int my_strlen(const char * str); Funktion darf Inhalt von str nicht verändern

128 128 Const Correctness in APIs int my_strlen( char * str); Funktion darf Inhalt von str verändern my_strlen( ABC ) gibt Compile-Fehler int my_strlen(const char * str); Funktion darf Inhalt von str nicht verändern my_strlen( ABC ) erlaubt und sicher

129 Initialisierung von Strings

130 130 Initialisierung von Strings char a[] = Hallo ;

131 131 Initialisierung von Strings char a[] = Hallo ; sizeof(a) = sizeof(char)*(5 + 1)

132 132 Initialisierung von Strings Variante Mit Array char a[] = Hallo ; sizeof(a) = sizeof(char)*(5 + 1)

133 133 Initialisierung von Strings Variante Mit Array char a[] = Hallo ; sizeof(a) = sizeof(char)*(5 + 1) Inhalt les- und schreibbar

134 134 Initialisierung von Strings Variante Mit Array char a[] = Hallo ; sizeof(a) = sizeof(char)*(5 + 1) Inhalt les- und schreibbar Variante Nur Pointer

135 135 Initialisierung von Strings Variante Mit Array char a[] = Hallo ; sizeof(a) = sizeof(char)*(5 + 1) Inhalt les- und schreibbar Variante Nur Pointer char * p = Hallo ;

136 136 Initialisierung von Strings Variante Mit Array char a[] = Hallo ; sizeof(a) = sizeof(char)*(5 + 1) Inhalt les- und schreibbar Variante Nur Pointer char * p = Hallo ; sizeof(p) = sizeof(char *)

137 137 Initialisierung von Strings Variante Mit Array char a[] = Hallo ; sizeof(a) = sizeof(char)*(5 + 1) Inhalt les- und schreibbar Variante Nur Pointer char * p = Hallo ; sizeof(p) = sizeof(char *) Inhalt nicht schreibbar

138 138 Initialisierung von Strings Variante Mit Array char a[] = Hallo ; sizeof(a) = sizeof(char)*(5 + 1) Inhalt les- und schreibbar Variante Nur Pointer const char * p = Hallo ; sizeof(p) = sizeof(char *) Inhalt nicht schreibbar

139 139 Variante Nur Pointer #include <stdio.h> int main() { char * a = hallo ; char * b = hallo ; } return 0;

140 140 Variante Nur Pointer #include <stdio.h> int main() { char * a = hallo ; char * b = hallo ; printf( a=%p\n b=%p\n, a, b); } return 0;

141 141 Variante Nur Pointer #include <stdio.h> int main() { char * a = hallo ; char * b = hallo ; printf( a=%p\n b=%p\n, a, b); a[0] = X ; } return 0;

142 142 Ausgabe # gcc rombad.c -o rombad

143 143 Ausgabe # gcc rombad.c -o rombad #./rombad

144 144 Ausgabe # gcc rombad.c -o rombad #./rombad a=0x80484dc b=0x80484dc

145 145 Ausgabe # gcc rombad.c -o rombad #./rombad a=0x80484dc b=0x80484dc

146 146 Ausgabe # gcc rombad.c -o rombad #./rombad a=0x80484dc b=0x80484dc Segmentation fault

147 147 GCC Flag -Wwrite-strings # gcc -Wall -Wextra -Wwrite-strings \ rombad.c -o rombad

148 148 GCC Flag -Wwrite-strings # gcc -Wall -Wextra -Wwrite-strings \ rombad.c -o rombad rombad.c: In function main : rombad.c:4: warning: initialization discards qualifiers from pointer target type rombad.c:5: warning: initialization discards qualifiers from pointer target type

149 149 Variante Nur Pointer #include <stdio.h> int main() { char * a = hallo ; char * b = hallo ; printf( a=%p\n b=%p\n, a, b); a[0] = X ; } return 0;

150 150 Variante Nur Pointer #include <stdio.h> int main() { const char * a = hallo ; const char * b = hallo ; printf( a=%p\n b=%p\n, a, b); a[0] = X ; } return 0;

151 151 Variante Nur Pointer #include <stdio.h> int main() { const char * a = hallo ; const char * b = hallo ; printf( a=%p\n b=%p\n, a, b); a[0] = X ; } return 0;

152 Mehrdimensionale Arrays

153 Mehrdimensionale Arrays Zwei Varianten: Array von Arrays ( deep array ) linear ( flat array ) 153

154 Variante Array von Arrays

155 155 2D-Array als Array von Arrays

156 156 2D-Array als Array von Arrays

157 157 2D-Array als Array von Arrays a

158 158 2D-Array als Array von Arrays a a[0] a[1] 3 4 5

159 159 2D-Array als Array von Arrays a a[0] a[1] a[1][2]

160 2D-Array als Array von Arrays int main() { } return 0; 160

161 2D-Array als Array von Arrays int main() { int row0[] = {0, 1, 2}; int row1[] = {3, 4, 5}; int * const d[] = {row0, row1}; } return 0; 161

162 162 2D-Array als Array von Arrays int main() { int row0[] = {0, 1, 2}; int row1[] = {3, 4, 5}; int * const d[] = {row0, row1}; demo_deep(d); return 0; }

163 163 2D-Array als Array von Arrays void demo_deep(int * const * a) { a[1][2] *= 2; } int main() { int row0[] = {0, 1, 2}; int row1[] = {3, 4, 5}; int * const d[] = {row0, row1}; demo_deep(d); return 0; }

164 Variante Linear

165 165 2D-Array linear

166 166 2D-Array linear a

167 167 2D-Array linear a a[0] a[1] a[1][2]

168 168 2D-Array linear int main() { } return 0;

169 169 2D-Array linear int main() { int f[][3] = { {0, 1, 2}, {3, 4, 5} }; } return 0;

170 170 2D-Array linear int main() { int f[][3] = { {0, 1, 2}, {3, 4, 5} }; demo_flat(f); return 0; }

171 171 2D-Array linear void demo_flat(int a[][3]) { a[1][2] *= 2; } int main() { int f[][3] = { {0, 1, 2}, {3, 4, 5} }; demo_flat(f); return 0; }

172 Variante Hybrid

173 173 2D-Array-Hybrid int main() { } return 0;

174 174 2D-Array-Hybrid int main() { int f[][3] = { {0, 1, 2}, {3, 4, 5} }; } return 0;

175 175 2D-Array-Hybrid int main() { int f[][3] = { {0, 1, 2}, {3, 4, 5} }; int * const d[] = {f[0], f[1]}; } return 0;

176 176 2D-Array-Hybrid int main() { int f[][3] = { {0, 1, 2}, {3, 4, 5} }; int * const d[] = {f[0], f[1]}; demo_deep(d); demo_flat(f); return 0; }

177 177 2D-Array-Hybrid void demo_deep(int * const * a); void demo_flat(int a[][3]); int main() { int f[][3] = { {0, 1, 2}, {3, 4, 5} }; int * const d[] = {f[0], f[1]}; demo_deep(d); demo_flat(f); return 0; }

178 argc und argv

179 179 argc und argv #include <stdio.h> int main() { } return 0;

180 180 argc und argv #include <stdio.h> int main(int argc, char ** argv) { } return 0;

181 181 argc und argv #include <stdio.h> int main(int argc, char ** argv) { printf( %d parameters\n, argc - 1); } return 0;

182 182 argc und argv #include <stdio.h> int main(int argc, char ** argv) { int i = 0; printf( %d parameters\n, argc - 1); for (; i < argc; i++) { } } return 0;

183 183 argc und argv #include <stdio.h> int main(int argc, char ** argv) { int i = 0; printf( %d parameters\n, argc - 1); for (; i < argc; i++) { printf( [%d] %s\n, i, argv[i]); } return 0; }

184 184 Ausgabe # gcc print_args.c -o print_args

185 185 Ausgabe # gcc print_args.c -o print_args #./print_args free open source software

186 186 Ausgabe # gcc print_args.c -o print_args #./print_args free open source software 3 parameters [0]./print_args [1] free [2] open source [3] software

187 Weiterführende Themen

188 Weiterführende Themen Character Encodings, Unicode, wchar_t Sicherer Umgang mit Strings Der Typ size_t Void-Pointer Funktions-Pointer 188

189 Zusammenfassung

190 Zusammenfassung sizeof(x ) liefert die Größe von x in Byte Operator & liefert eine Adresse Operator * folgt einer Adresse (er dereferenziert) Pointer sind typisiert Arrays sind Pointer auf ihr erstes Element Strings sind nulltermininiert Const Correctness bei Pointern ist keine Geschmacksfrage 190

191 191 Eine Bitte Veröffentlichen Sie Ihren Code als Freie Software.

192 192 Danke! Zeit für Ihre Fragen!

C-Kurs 2010 Pointer. 16. September v2.7.3

C-Kurs 2010 Pointer. 16. September v2.7.3 C-Kurs 2010 Pointer Sebastian@Pipping.org 16. September 2010 v2.7.3 This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 License. C-Kurs Mi Konzepte, Syntax,... printf, scanf Next

Mehr

C-Kurs 2011: Arrays, Strings, Pointer. Ohne Pointer geht nichts. Willkommen zum dritten Tag des C-Kurses.

C-Kurs 2011: Arrays, Strings, Pointer. Ohne Pointer geht nichts. Willkommen zum dritten Tag des C-Kurses. Willkommen zum dritten Tag des C-Kurses. C-Kurs 2011: Arrays, Strings, Pointer Sebastian@Pipping.org 15. September 2011 v3.0.35 Mein Name ist Sebastian Pipping. Das dritte Jahr spreche ich nun im Rahmen

Mehr

Einführung Pointer. C-Kurs 2013, 2. Vorlesung. Nico Andy

Einführung Pointer. C-Kurs 2013, 2. Vorlesung. Nico Andy Einführung Pointer C-Kurs 2013, 2. Vorlesung Nico nico@freitagsrunde.org Andy andrew@freitagsrunde.org http://wiki.freitagsrunde.org 10. September 2013 This work is licensed under the Creative Commons

Mehr

Arrays (Felder/Vektoren)

Arrays (Felder/Vektoren) Arrays (Felder/Vektoren) Zusammenfassung mehrerer Variablen des gleichen Typs unter einem Namen im Speicher direkt hintereinander abgelegt Definition: Typname Arrayname [Größe]; Beispiel: int ar [5]; Zugriff

Mehr

Strings (Zeichenketten)

Strings (Zeichenketten) Strings (Zeichenketten) INE1, Montag M. Thaler, tham@zhaw.ch Office TG208 http://www.zhaw.ch/~tham 1 Um was geht es? Interaktion mit Computer oft textbasiert Fragen wie wird Text dargestellt? wie wird

Mehr

Grundlagen der Programmierung in C++ Arrays und Strings, Teil 1

Grundlagen der Programmierung in C++ Arrays und Strings, Teil 1 Grundlagen der Programmierung in C++ Arrays und Strings, Teil 1 Wintersemester 2005/2006 G. Zachmann Clausthal University, Germany zach@in.tu-clausthal.de Das C++ Typsystem simple structured integral enum

Mehr

Zeichenketten (1) Literale von Zeichenketten werden in doppelte Anführungszeichen gesetzt

Zeichenketten (1) Literale von Zeichenketten werden in doppelte Anführungszeichen gesetzt Zeichenketten (1) Literale Literale von Zeichenketten werden in doppelte Anführungszeichen gesetzt "Hallo Welt" Mehrere solcher Literale gelten als eine Zeichenkette, wenn sie nur durch Whitespaces (Leerzeichen,

Mehr

Einführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz

Einführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz Patrick Schulz patrick.schulz@paec-media.de 29.04.2013 1 Einführung Einführung 2 3 4 Quellen 1 Einführung Einführung 2 3 4 Quellen Hello World in Java Einführung 1 public class hello_ world 2 { 3 public

Mehr

Praxis der Programmierung

Praxis der Programmierung Zeichenketten (Strings), Ein- und Ausgabe Institut für Informatik und Computational Science Universität Potsdam Henning Bordihn Einige Folien gehen auf A. Terzibaschian zurück. 1 Zeichenketten (Strings)

Mehr

Organisatorisches. Übungsleiter: Karsten Otto Homepage: Aufgaben

Organisatorisches. Übungsleiter: Karsten Otto Homepage:  Aufgaben Organisatorisches Übungsleiter: Karsten Otto (otto@inf.fu-berlin.de) Homepage: http://www.inf.fu-berlin.de/lehre/ss04/sysi/ Aufgaben Montags im Netz Vorbesprechung Dienstag/Mittwoch in den Übungen Abgabe

Mehr

Programmieren in C. Funktionen mit Zeigern und Adressen. Prof. Dr. Nikolaus Wulff

Programmieren in C. Funktionen mit Zeigern und Adressen. Prof. Dr. Nikolaus Wulff Programmieren in C Funktionen mit Zeigern und Adressen Prof. Dr. Nikolaus Wulff ByValue versus byreferenz C übergibt immer Kopien der Variablen an Funktionen. Es ist nur dann möglich die Werte von Variablen

Mehr

! "eine Zeichenkette\nmit Doppelapostroph \" und Backslash \\"

! eine Zeichenkette\nmit Doppelapostroph \ und Backslash \\ 1.2. Datentypen Zeichenketten: Zeichenkettenliterale wie»üblich«"eine Zeichenkette\nmit Doppelapostroph \" und Backslash \\" werden als 0-terminierte char-felder realisiert char* hello = "Hello, World";

Mehr

Variablen. Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes

Variablen. Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes Variablen Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes v ist Stück im Speicher, der 4 Bytes lang ist Speicherzugriff? Über Adressen!

Mehr

Arrays 120. array-qualifier static restrict const volatile array-size-expression assignment-expression * simple-declarator identifier

Arrays 120. array-qualifier static restrict const volatile array-size-expression assignment-expression * simple-declarator identifier Arrays 120 direct-declarator simple-declarator ( simple-declarator ) function-declarator array-declarator array-declarator direct-declarator [ [ array-qualifier-list ] [ array-size-expression ] ] array-qualifier-list

Mehr

C-Crashkurs. Praktikum Systemmanagement und Sicherheit

C-Crashkurs. Praktikum Systemmanagement und Sicherheit C-Crashkurs Praktikum Systemmanagement und Sicherheit ZIELE DIESES KURSES 15.04.2014 Dipl.-Inf. M. Bohr C_Crashkurs 2 Compiler gcc verwenden geläufigste Datentypen in C kennen Fehlerbehandlung (ohne Ausnahmeklassen)

Mehr

Programmieren in C SS Vorlesung 4, Dienstag 14. Mai (Strings, Zeiger, Allokation, Strukturen)

Programmieren in C SS Vorlesung 4, Dienstag 14. Mai (Strings, Zeiger, Allokation, Strukturen) Programmieren in C SS 2019 Vorlesung 4, Dienstag 14. Mai 2019 (Strings, Zeiger, Allokation, Strukturen) Prof. Dr. Peter Thiemann Professur für Programmiersprachen Institut für Informatik Universität Freiburg

Mehr

Arrays 115. array-qualifier static restrict const volatile array-size-expression assignment-expression * simple-declarator identifier

Arrays 115. array-qualifier static restrict const volatile array-size-expression assignment-expression * simple-declarator identifier Arrays 115 direct-declarator simple-declarator ( simple-declarator ) function-declarator array-declarator array-declarator direct-declarator [ [ array-qualifier-list ] [ array-size-expression ] ] array-qualifier-list

Mehr

ESP Tutorium. Studienassistent: Ewald Moitzi. Gruppe 1

ESP Tutorium. Studienassistent: Ewald Moitzi.   Gruppe 1 ESP Tutorium Studienassistent: Ewald Moitzi E-Mail: prog-tutor-ewald@iicm.tugraz.at Gruppe 1 Finde den Fehler 1 char text[5]; strcpy (text, "hallo"); printf ("%s\n",text); Finde den Fehler 1 char text[5];

Mehr

INE1 Mehr zu Funktionen Ausserdem: Strings (Saiten) Call by value, struct's Call by reference Array Parameter Strings und Stringfunktionen

INE1 Mehr zu Funktionen Ausserdem: Strings (Saiten) Call by value, struct's Call by reference Array Parameter Strings und Stringfunktionen INE1 Mehr zu Funktionen Ausserdem: Strings (Saiten) Call by value, struct's Call by reference Array Parameter Strings und Stringfunktionen 1 Call by Value, Structs 2 von 45 Call by value (Wiederholung)

Mehr

Teil 5: Zeiger, Felder, Zeichenketten Gliederung

Teil 5: Zeiger, Felder, Zeichenketten Gliederung Teil 5: Zeiger, Felder, Zeichenketten Gliederung Zeiger und Adressen Felder (Arrays) Zeichenketten (Strings) Zeigerarithmetik Mehrdimensionale Felder Zeiger und Adressen Felder Zeichenketten Zeigerarithmetik

Mehr

Vektoren 105. array-qualifier static restrict const volatile array-size-expression assignment-expression * simple-declarator identifier

Vektoren 105. array-qualifier static restrict const volatile array-size-expression assignment-expression * simple-declarator identifier Vektoren 105 direct-declarator simple-declarator ( simple-declarator ) function-declarator array-declarator array-declarator direct-declarator [ [ array-qualifier-list ] [ array-size-expression ] ] array-qualifier-list

Mehr

7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter});

7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter}); S. d. I.: Programieren in C Folie 7-1 7 Funktionen 7.1 Definition Prototyp-Syntax: Speicherklasse Typ Name (formale Parameter); der Funktions-Prototyp deklariert eine Funktion, d.h. er enthält noch nicht

Mehr

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften Programmiertechnik Teil 4 C++ Funktionen: Prototypen Overloading Parameter C++ Funktionen: Eigenschaften Funktionen (Unterprogramme, Prozeduren) fassen Folgen von Anweisungen zusammen, die immer wieder

Mehr

Informatik für Mathematiker und Physiker Woche 7. David Sommer

Informatik für Mathematiker und Physiker Woche 7. David Sommer Informatik für Mathematiker und Physiker Woche 7 David Sommer David Sommer 30. Oktober 2018 1 Heute: 1. Repetition Floats 2. References 3. Vectors 4. Characters David Sommer 30. Oktober 2018 2 Übungen

Mehr

F Zeiger, Felder und Strukturen in C

F Zeiger, Felder und Strukturen in C F Zeiger, Felder und Strukturen in C F Zeiger, Felder und Strukturen in C F.1 Zeiger(-Variablen) 1 Einordnung Konstante: Bezeichnung für einen Wert a 0110 0001 Variable: Bezeichnung eines Datenobjekts

Mehr

Software Entwicklung 1

Software Entwicklung 1 Software Entwicklung 1 Annette Bieniusa AG Softech FB Informatik TU Kaiserslautern Einführung in C Bieniusa Software Entwicklung 1 2/ 50 Warum C in SE1? Meist verwendete Sprache weltweit Viele wichtige

Mehr

Übungen zu Softwaresysteme I Jürgen Kleinöder Universität Erlangen-Nürnberg Informatik 4, 2004 K-Uebung9.fm

Übungen zu Softwaresysteme I Jürgen Kleinöder Universität Erlangen-Nürnberg Informatik 4, 2004 K-Uebung9.fm K 9. Übung K 9. Übung K-1 Überblick Besprechung 7. Aufgabe (jbuffer) Unix, C und Sicherheit K.1 Mögliche Programmsequenz für eine Passwortabfrage in einem Server- Programm: int main (int argc, char *argv[])

Mehr

einlesen n > 0? Ausgabe Negative Zahl

einlesen n > 0? Ausgabe Negative Zahl 1 Lösungen Kapitel 1 Aufgabe 1.1: Nassi-Shneiderman-Diagramm quadratzahlen Vervollständigen Sie das unten angegebene Nassi-Shneiderman-Diagramm für ein Programm, welches in einer (äußeren) Schleife Integer-Zahlen

Mehr

Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften

Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften Teil 7: Matrizen, Vektoren und dynamische Speicherverwaltung Martin Nolte Abteilung für Angewandte Mathematik Universität Freiburg

Mehr

Zeichenketten (Strings) in C

Zeichenketten (Strings) in C Zeichenketten (Strings) in C Jörn Loviscach Versionsstand: 7. Oktober 2011, 11:27 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen in der Vorlesung. Videos dazu: http://www.j3l7h.de/videos.html

Mehr

6. Bearbeitung von Strings in C Bearbeitung von Strings in C

6. Bearbeitung von Strings in C Bearbeitung von Strings in C Bearbeitung von Strings in C 6-1 Definition des String: 6. Bearbeitung von Strings in C Zeichenstrings werden als Felder von Zeichen abgespeichert: char [ ] ; Wie die Daten (Zeichenfolge)

Mehr

Operatoren in C. Gastvorlesung Andreas Textor

Operatoren in C. Gastvorlesung Andreas Textor Operatoren in C Gastvorlesung - 11.01.10 Andreas Textor andreas.textor@hs-rm.de Terminologie Operand 4 + 2 Operand Operator Unterscheidung nach Anzahl Operanden Unäre, Binäre und Ternäre Operatoren Z.B.:!x;

Mehr

Systempraktikum im Wintersemester 2009/2010 (LMU): Vorlesung vom Foliensatz 2

Systempraktikum im Wintersemester 2009/2010 (LMU): Vorlesung vom Foliensatz 2 Systempraktikum im Wintersemester 2009/2010 (LMU): Vorlesung vom 29.10. Foliensatz 2 Modularisierung (T) Eigene Headerdateien und Bibliotheken (P) Arten der Parameterübergabe (P) Arrays und Strukturen

Mehr

Zusammenfassung des Handzettels für Programmieren in C

Zusammenfassung des Handzettels für Programmieren in C Zusammenfassung des Handzettels für Programmieren in C In der handschriftlichen Kopie werden mehr Abkürzungen verwendet. Alles Grün markierte dient zum lernen und wird nicht auf den Handzettel übertragen.

Mehr

Übungspaket 14 Eindimensionale Arrays

Übungspaket 14 Eindimensionale Arrays Übungspaket 14 Eindimensionale Arrays Übungsziele: Skript: Deklaration und Verwendung eindimensionaler Arrays Kapitel: 33 Semester: Wintersemester 2016/17 Betreuer: Kevin, Matthias, Thomas und Ralf Synopsis:

Mehr

C allgemein. C wurde unter und für Unix entwickelt. Vorläufer sind BCPL und B.

C allgemein. C wurde unter und für Unix entwickelt. Vorläufer sind BCPL und B. C-Crash-Kurs Eine kurze, keinesfalls erschöpfende Einführung in die Sprache C für Studierende, die eine strukturierte imperative Programmiersprache beherrschen. Die Vorstellung erfolgt am Beispiel von

Mehr

Ein- und Ausgabe. C - Kurs Mario Bodemann. 15. September 2010

Ein- und Ausgabe. C - Kurs Mario Bodemann. 15. September 2010 Ein- und Ausgabe C - Kurs 2010 Mario Bodemann 15. September 2010 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License 1 / 46 Inhaltsverzeichnis 1 Wiederholung

Mehr

Einführung in C. Alexander Batoulis. 5. Mai Fakutltät IV Technische Universität Berlin

Einführung in C. Alexander Batoulis. 5. Mai Fakutltät IV Technische Universität Berlin Fakutltät IV Technische Universität Berlin 5. Mai 2014 Inhaltsverzeichnis 1 2 3 4 5 6 7 Überblick Beispielprogramm in Java Beispielprogramm in C 1 2 3 4 5 6 7 Beispielprogramm in Java Beispielprogramm

Mehr

Arrays,Strings&Pointer in C/C++

Arrays,Strings&Pointer in C/C++ Arrays,Strings&Pointer in C/C++ Vortrag Mathias Reich Am 21.5.2002 Pointer Da zur Zeit der Compelierung des Programms nicht immer der Umfang der zu bearbeitenden Daten feststeht muss man sich - in manchen

Mehr

Funktionen. Datentypen Zeiger. Vorlesung Computergrundlagen WS 2010/2011, x y = x + 6

Funktionen. Datentypen Zeiger. Vorlesung Computergrundlagen WS 2010/2011, x y = x + 6 Funktionen Datentypen Zeiger #include void init(float a) { if (a

Mehr

Computergrundlagen Programmieren in C

Computergrundlagen Programmieren in C Die Compilersprache C Computergrundlagen Programmieren in C Axel Arnold Institut für Computerphysik Universität Stuttgart Wintersemester 2010/11 Geschichte D. M. Ritchie, *1941 1971-73: Entwickelt von

Mehr

Zeiger, Arrays und Strings in C und C++

Zeiger, Arrays und Strings in C und C++ Zeiger, Arrays und Strings in C und C++ 1 Zeiger in Java und C/C++ Zeigervariable (kurz: Zeiger, engl.: pointer): eine Variable, die als Wert eine Speicheradresse enthält Java: Zeiger werden implizit für

Mehr

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch) JAVA BASICS 2. Primitive Datentypen 1. Warum Java? weit verbreitet einfach und (relativ) sicher keine Pointer (?) keine gotos kein Präprozessor keine globalen Variablen garbage collection objekt-orientiert

Mehr

Einführung in die Programmiersprache C

Einführung in die Programmiersprache C Einführung in die Programmiersprache C 2 Arrays und Pointer Alexander Sczyrba Robert Homann Georg Sauthoff Universität Bielefeld, Technische Fakultät statische Arrays Deklaration (eindimensional): /* 40

Mehr

Typ : void* aktuelle Parameter Pointer von beliebigem Typ

Typ : void* aktuelle Parameter Pointer von beliebigem Typ 2. Funktionen - Prototypvereinbarung typangabe funktionsname(parameterliste); - Funktionsdefinition typ funktionsname(parameterliste){ Anweisung - Funktionstyp -> Typ der Funktionswertes zulaessige Typangaben

Mehr

Zeiger. C-Kurs 2012, 2. Vorlesung. Tino Kutschbach 10.

Zeiger. C-Kurs 2012, 2. Vorlesung. Tino Kutschbach  10. Zeiger C-Kurs 2012, 2. Vorlesung Tino Kutschbach tino.kutschbach@campus.tu-berlin.de http://wiki.freitagsrunde.org 10. September 2012 This work is licensed under the Creative Commons Attribution-ShareAlike

Mehr

Organisatorisches. Algorithmen und Datenstrukturen (für ET/IT) Programm heute. Definition Datenstruktur. Nächste Woche keine Vorlesung!

Organisatorisches. Algorithmen und Datenstrukturen (für ET/IT) Programm heute. Definition Datenstruktur. Nächste Woche keine Vorlesung! Organisatorisches Algorithmen und Datenstrukturen (für ET/IT) Wintersemester 2012/13 Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München Nächste Woche keine Vorlesung! Es

Mehr

Ein- und Ausgabe. C - Kurs Mario Bodemann. 15. September 2010

Ein- und Ausgabe. C - Kurs Mario Bodemann. 15. September 2010 Ein- und Ausgabe C - Kurs 2010 Mario Bodemann 15. September 2010 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License 1 / 46 Inhaltsverzeichnis 1 Wiederholung

Mehr

Woche 6. Cedric Tompkin. April 11, Cedric Tompkin Woche 6 April 11, / 29

Woche 6. Cedric Tompkin. April 11, Cedric Tompkin Woche 6 April 11, / 29 Woche 6 Cedric Tompkin April 11, 2018 Cedric Tompkin Woche 6 April 11, 2018 1 / 29 Figure: Mehr Comics Cedric Tompkin Woche 6 April 11, 2018 2 / 29 Learning Objectives Dir kennst Return-by-value und Return-by-reference.

Mehr

3D Programmierpraktikum: Einführung in C++ - Teil 1

3D Programmierpraktikum: Einführung in C++ - Teil 1 3D Programmierpraktikum: Einführung in C++ - Teil 1 Praktikum 3D Programmierung Sebastian Boring, Otmar Hilliges Donnerstag, 27. April 2006 LMU München Medieninformatik Boring/Hilliges 3D Programmierpraktikum

Mehr

Programmiersprachen Einführung in C

Programmiersprachen Einführung in C Programmiersprachen Einführung in C Teil 2: Prof. Dr. Unser erstes C-Programm int main (int argc, char *argv[]) int i; int sum = 0; for (i = 0; i

Mehr

Nachdem die VM gestartet ist und sich darin angemeldet wurde, starten wir Eclipse.

Nachdem die VM gestartet ist und sich darin angemeldet wurde, starten wir Eclipse. Starten der Umgebung Nachdem die VM gestartet ist und sich darin angemeldet wurde, starten wir Eclipse. Wir wählen links ein Projekt aus öffnen dann unser Projekt und dort das Programm intro.c Sicherheitshalber

Mehr

Input, Output, Dateien

Input, Output, Dateien Input, Output, Dateien C-Kurs 2013, 1. Tutorium Armelle Vérité http://wiki.freitagsrunde.org 8. September 2013 This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 License. 1 / 21

Mehr

6 Sicherheitsprobleme!

6 Sicherheitsprobleme! Klaus-Peter Löhr! 6 Sicherheitsprobleme! 6.1 Unsichere Programmiersprachen!5! 6.2 Angriffe mit Pufferüberlauf!8! Zusammenfassung!!!16! WS 13/14 ALP 5 - Sicherheitsprobleme 1 IT-Sicherheit (IT security)

Mehr

Teil 5: Felder, Zeiger, Zeigerarithmetik Gliederung

Teil 5: Felder, Zeiger, Zeigerarithmetik Gliederung Teil 5: Felder, Zeiger, Zeigerarithmetik Gliederung Felder (Arrays) Mehrdimensionale Felder Zeiger und Adressen Zeigerarithmetik Felder Mehrdimensionale Felder Zeiger und Adressen Zeigerarithmetik Felder

Mehr

Ein-/Ausgabe, Dateisystem. Kapitel 9: Ein-/Ausgabe. Programmieren in C für Elektrotechniker. Programmieren in C. Dateisystem. Programmieren in C

Ein-/Ausgabe, Dateisystem. Kapitel 9: Ein-/Ausgabe. Programmieren in C für Elektrotechniker. Programmieren in C. Dateisystem. Programmieren in C für Elektrotechniker Kapitel 9: Dateisystem, Dateisystem E/A-Konzept in UNIX und C UNIX (und damit auch C) verwendet Datenströme (streams) als Konzept zur Verbindung von Programmen mit E/A-Geräten und

Mehr

Ein- und Ausgabe mit Dateien

Ein- und Ausgabe mit Dateien Ein- und Ausgabe mit Dateien Edouard Lamboray Informatik I für D-ITET (2004) Ein- und Ausgabekonzepte in C und C++ fstream header Streamobjekt Files schreiben und lesen Argumente von main Vorbemerkungen

Mehr

Modellierung und Programmierung

Modellierung und Programmierung Modellierung und Programmierung Dr. Martin Riplinger 21.11.2012 IAM Institut für Angewandte Mathematik Funktionen elementare Merkregeln Deklaration und Definition Die Funktionsdeklaration steht im Code

Mehr

GI Vektoren

GI Vektoren Vektoren Problem: Beispiel: viele Variablen vom gleichen Typ abspeichern Text ( = viele char-variablen), Ergebnisse einer Meßreihe ( = viele int-variablen) hierfür: Vektoren ( = Arrays = Feld ) = Ansammlung

Mehr

Ausgewählte Bibliotheksfunktionen

Ausgewählte Bibliotheksfunktionen Ausgewählte Bibliotheksfunktionen fopen überträgt den Inhalt des Dateipuffers: Schreibmodus: Dateipuffer wird geschrieben Lesemodus: Puffer wird geleert if (fflush(fp) == EOF) printf("puffer nicht geschrieben\n");

Mehr

Outline. 1 Einleitung. 2 Einführung in C. 3 Fortgeschrittenes in C. 4 Einführung in Emacs Lisp. 5 Einführung in Prolog. 6 Formale Semantik

Outline. 1 Einleitung. 2 Einführung in C. 3 Fortgeschrittenes in C. 4 Einführung in Emacs Lisp. 5 Einführung in Prolog. 6 Formale Semantik Outline 1 Einleitung 2 Einführung in C 3 Fortgeschrittenes in C 4 Einführung in Emacs Lisp 5 Einführung in Prolog 6 Formale Semantik Imperative Programmierung Imperatives Paradigma Ziel: Ablaufbeschreibung

Mehr

Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften

Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften Teil 4: Felder und Zeichenketten Martin Nolte Abteilung für Angewandte Mathematik Universität Freiburg i. Br. Vorlesung vom 9.

Mehr

Themen. Formatierte und unformatierte Eingabe Bedingungsoperator Namespaces Kommandozeilenargumente

Themen. Formatierte und unformatierte Eingabe Bedingungsoperator Namespaces Kommandozeilenargumente Themen Formatierte und unformatierte Eingabe Bedingungsoperator Namespaces Kommandozeilenargumente Formatierte Eingabe mit cin Die Formatierung der Eingabe ist der Ausgabe sehr ähnlich: Die Flags werden

Mehr

Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften

Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften Teil 5: Funktionen, Gültigkeitsbereiche und Rekursion Martin Nolte Abteilung für Angewandte Mathematik Universität Freiburg i.

Mehr

10 Die Programmiersprache C99: Zusammenfassung

10 Die Programmiersprache C99: Zusammenfassung 10 Die Programmiersprache C99: Zusammenfassung Jörn Loviscach Versionsstand: 25. September 2014, 18:40 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen beim Ansehen der Videos: http://www.j3l7h.de/videos.html

Mehr

Ein- und Ausgabe mit Dateien

Ein- und Ausgabe mit Dateien Ein- und Ausgabe mit Dateien Edouard Lamboray Informatik I für D-ITET (2004) Ein- und Ausgabekonzepte in C und C++ fstream header Streamobjekt Files schreiben und lesen Argumente von main 2 Vorbemerkungen

Mehr

1. Definition. 2. Interne Speicherung der Zeichenketten. 3. Vereinbarung von Zeichenketten

1. Definition. 2. Interne Speicherung der Zeichenketten. 3. Vereinbarung von Zeichenketten 1. Definition Eine Zeichenkette (String) ist eine Aufeinanderfolge von darstellbaren Zeichen, die sequentiell im Speicher angeordnet sind und gemeinsam angesprochen werden. Jedes einzelne Zeichen wird

Mehr

Teil 6: Strukturen und Unionen Gliederung

Teil 6: Strukturen und Unionen Gliederung Teil 6: Strukturen und Unionen Gliederung Strukturen Typdefinitionen Unionen Dynamische Speicherverwaltung Strukturen Typdefinitionen Unionen Dynamische Speicherverwaltung Strukturen 6.2 Strukturen Typdefinitionen

Mehr

U23 - Shellcode. Twix Chaos Computer Club Cologne. Motivation Einstieg Der erste Shellcode Nullbytes, NOP Slides

U23 - Shellcode. Twix Chaos Computer Club Cologne.  Motivation Einstieg Der erste Shellcode Nullbytes, NOP Slides Twix e.v. http://koeln.ccc.de 2016-11-28 Überblick 1 Motivation Was ist Shellcode? Beispiel 2 Einstieg Erzeugen, Testen von Shellcode 3 Der erste Shellcode Strings in Shellcode 4 Nullbytes, NOP Slides

Mehr

Bereits behandelt: Einfache Datentypen / Variablen. Schleifen und Verzweigungen. Funktionen. Heute: Felder, Zeiger, Referenzen. Freispeicherverwaltung

Bereits behandelt: Einfache Datentypen / Variablen. Schleifen und Verzweigungen. Funktionen. Heute: Felder, Zeiger, Referenzen. Freispeicherverwaltung Kompaktkurs C++ Themen C 1 Bereits behandelt: Einfache Datentypen / Variablen Schleifen und Verzweigungen Funktionen Heute: Felder, Zeiger, Referenzen Freispeicherverwaltung Zeichenketten Kommandozeilenargumente

Mehr

Elementare Datentypen

Elementare Datentypen Elementare Datentypen Arrays & Pointer sizeof 124 Elementare Datentypen C kennt folgende elementare Datentypen: Datentyp für Zeichen (z.b. Buchstaben) char Datentypen für Ganzzahlen: short int long Datentypen

Mehr

Bereits behandelt: Einfache Datentypen / Variablen. Schleifen und Verzweigungen. Funktionen. Heute: Felder, Zeiger, Referenzen. Freispeicherverwaltung

Bereits behandelt: Einfache Datentypen / Variablen. Schleifen und Verzweigungen. Funktionen. Heute: Felder, Zeiger, Referenzen. Freispeicherverwaltung Kompaktkurs C++ Themen C 1 Bereits behandelt: Einfache Datentypen / Variablen Schleifen und Verzweigungen Funktionen Heute: Felder, Zeiger, Referenzen Freispeicherverwaltung Zeichenketten Kommandozeilenargumente

Mehr

Embedded Toolchain. 1 C/C++-Grundlagen. strncpy_s, strcpy_s etc. V 4.02; Hon. Prof. Helmke 1

Embedded Toolchain. 1 C/C++-Grundlagen. strncpy_s, strcpy_s etc. V 4.02; Hon. Prof. Helmke 1 1 C/C++-Grundlagen strncpy_s, strcpy_s etc. V 4.02; Hon. Prof. Helmke 1 Anwendung von malloc/free: Dynamische Felder char name[20]; strcpy(name, Helmke ); char* pname;... pname = malloc(sizeof(char)*20);

Mehr

Zeiger in C und C++ Zeiger in Java und C/C++

Zeiger in C und C++ Zeiger in Java und C/C++ 1 Zeiger in Java und C/C++ Zeigervariable (kurz: Zeiger, engl.: pointer): eine Variable, die als Wert eine Speicheradresse enthält Java: Zeiger werden implizit für Referenztypen (Klassen und Arrays) verwendet,

Mehr

Zeiger. Zeiger ist eine Variable deren Wert eine Adresse enthält. Zeiger werden im Programm definiert. int *pmyinteger; Type *PointerName ;

Zeiger. Zeiger ist eine Variable deren Wert eine Adresse enthält. Zeiger werden im Programm definiert. int *pmyinteger; Type *PointerName ; Zeiger & Variable ist ein Speicherort im C++ Programm und hat eine Adresse. Variable - Zugriff auf Variable und/oder Adresse * & Operator liefert die Adresse einer Variablen im Speicher Adresse int myvariable

Mehr

Datei: svn/ckurs/trunk/c_texte/c_arrptr.txt, Datum: 30. Juni Felder und Zeiger

Datei: svn/ckurs/trunk/c_texte/c_arrptr.txt, Datum: 30. Juni Felder und Zeiger Datei: svn/ckurs/trunk/c_texte/c_arrptr.txt, Datum: 30. Juni 2015 Felder und Zeiger 1. Felder 1. Felder werden deklariert und definiert durch die Angabe der Elementanzahl nach dem Feldnamen mit dem Feldoperator

Mehr

Einführung in die Programmiersprache C

Einführung in die Programmiersprache C Einführung in die Programmiersprache C 3 Typen und Speicherverwaltung Alexander Sczyrba Robert Homann Georg Sauthoff Universität Bielefeld, Technische Fakultät Literatur (2) Kernighan and Ritchie, The

Mehr

Übungspaket 29 Dynamische Speicherverwaltung: malloc() und free()

Übungspaket 29 Dynamische Speicherverwaltung: malloc() und free() Übungspaket 29 Dynamische Speicherverwaltung malloc() und free() Übungsziele Skript In diesem Übungspaket üben wir das dynamische Alloziieren 1. und Freigeben von Speicherbereichen 2. von Zeichenketten

Mehr

Dynamischer Speicher

Dynamischer Speicher Dynamischer Speicher C-Kurs 2012, 3. Vorlesung Tino Kutschbach tino.kutschbach@campus.tu-berlin.de http://wiki.freitagsrunde.org 13. September 2012 This work is licensed under the Creative Commons Attribution-ShareAlike

Mehr

Einführung in die Programmierung Arrays, Zeiger, Strings. Arvid Terzibaschian

Einführung in die Programmierung Arrays, Zeiger, Strings. Arvid Terzibaschian Einführung in die Programmierung Arvid Terzibaschian 1 Arrays 2 Arrays: Motivation Gegeben: monatliche Durchschnittstemperaturen der letzten 5 Jahre Gesucht: Mittelwerte für Jahre, Monate, Jahreszeiten,

Mehr

Informatik - Übungsstunde

Informatik - Übungsstunde Informatik - Übungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zürich Woche 08-25.04.2018 Lernziele const: Reference const: Pointer vector: iterator using Jonas Lauener (ETH Zürich) Informatik

Mehr

4.12 Datenstrukturen/String-Bibliothek

4.12 Datenstrukturen/String-Bibliothek 4.12 Datenstrukturen/String-Bibliothek 4.12.1 Vergleich von Strings: strcmp() Ein Programm soll zu einem eingegebenen Bauelement die Betriebsmittelkennzeichnung ausgeben. Ein erster Entwurf sieht so aus

Mehr

Teil 6: Strukturen und Unionen Gliederung

Teil 6: Strukturen und Unionen Gliederung Teil 6: Strukturen und Unionen Gliederung Strukturen Typdefinitionen Unionen Dynamische Speicherverwaltung Strukturen 6.2 Strukturen Ursprung in Pascal als Datentyp record, Verbunddatentyp Strukturtyp

Mehr

! können default arguments haben: ein Endstück der Argumentliste einer Deklaration mit Wertevorgaben

! können default arguments haben: ein Endstück der Argumentliste einer Deklaration mit Wertevorgaben 1.4. Funktionen können default arguments haben: ein Endstück der Argumentliste einer Deklaration mit Wertevorgaben int atoi (const char* string, int base = 10); // ascii to int on radix base atoi ("110");

Mehr

Zeiger in C und C++ Zeiger in Java und C/C++

Zeiger in C und C++ Zeiger in Java und C/C++ 1 Zeiger in Java und C/C++ Zeigervariable (kurz: Zeiger, engl.: pointer): eine Variable, die als Wert eine Speicheradresse enthält Java: Zeiger werden implizit für Referenztypen (Klassen und Arrays) verwendet,

Mehr

Übungspaket 29 Dynamische Speicherverwaltung: malloc() und free()

Übungspaket 29 Dynamische Speicherverwaltung: malloc() und free() Übungspaket 29 Dynamische Speicherverwaltung: malloc() und free() Übungsziele: Skript: In diesem Übungspaket üben wir das dynamische Alloziieren 1. und Freigeben von Speicherbereichen 2. von Zeichenketten

Mehr

Schwerpunkte. 10. Felder (Arrays) Grundprinzip von Arrays. Klassifikation von Typen in Programmiersprachen

Schwerpunkte. 10. Felder (Arrays) Grundprinzip von Arrays. Klassifikation von Typen in Programmiersprachen Schwerpunkte 10. Felder (Arrays) Teil 1 Java-Beispiele: Echo.java Primzahlen.java Monate.java Klassifikation von Typen in Programmiersprachen Array: einziger strukturierter Typ in Java Deklaration, Erzeugung

Mehr

Einführung in die Programmiersprache C

Einführung in die Programmiersprache C Einführung in die Programmiersprache C Marcel Arndt arndt@ins.uni-bonn.de Institut für Numerische Simulation Universität Bonn Der Anfang Ein einfaches Programm, das Hello World! ausgibt: #include

Mehr

Funktionen, Zeiger und Arrays in C Software Entwicklung 1

Funktionen, Zeiger und Arrays in C Software Entwicklung 1 Funktionen, Zeiger und Arrays in C Software Entwicklung 1 Annette Bieniusa, Mathias Weber, Peter Zeller 1 Funktionen Mit Hilfe von Funktionen kann man (wie mit Prozeduren bzw. Methoden in Java) eine Problemstellung

Mehr

Crashkurs C++ - Teil 1

Crashkurs C++ - Teil 1 Crashkurs C++ - Teil 1 Intro Speicherverwaltung Variablen, Pointer, Referenzen Felder statische & dynamische Allozierung Birgit Möller & Denis Williams AG Bioinformatik & Mustererkennung Institut für Informatik

Mehr

Einführung Programmierpraktikum C Michael Zwick

Einführung Programmierpraktikum C Michael Zwick Einführung Programmierpraktikum C Michael Zwick Vorlesung, Übung & Fragestunde Dr.-Ing. Michael Zwick Raum Z945 zwick@tum.de (089) 289 23609 Tutorium Ab Dienstag: Auswahl Tutoriumsplatz auf www.ldv.ei.tum.de/lehre/computertechnik

Mehr

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch) JAVA BASICS 2. Primitive Datentypen 1. Warum Java? zunehmend weit verbreitet einfach und (relativ) sicher keine Adressrechnung, aber Pointer keine gotos kein Präprozessor keine globalen Variablen garbage

Mehr

Zeichendarstellung. Zeichen sind Zahlen (in C) Zeichen und switch

Zeichendarstellung. Zeichen sind Zahlen (in C) Zeichen und switch darstellung Arbeiten mit darstellung werden im Computer durch (kleine) Zahlen dargestellt in C können im Datentyp char gespeichert werden, dieser umfasst ein Byte und gilt als Ganzzahltyp darstellung Arbeiten

Mehr

5.1 Mehr Basistypen. (Wie viele Werte kann man mit n Bit darstellen?)

5.1 Mehr Basistypen. (Wie viele Werte kann man mit n Bit darstellen?) 5.1 Mehr Basistypen Außer int, stellt Java weitere Basistypen zur Verfügung. Zu jedem Basistyp gibt es eine Menge möglicher Werte. Jeder Wert eines Basistyps benötigt die gleiche Menge Platz, um ihn im

Mehr