C-Kurs 2011: Arrays, Strings, Pointer
|
|
- Emma Müller
- vor 5 Jahren
- Abrufe
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 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
MehrC-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
MehrEinfü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
MehrArrays (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
MehrStrings (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
MehrGrundlagen 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
MehrZeichenketten (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,
MehrEinfü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
MehrPraxis 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)
MehrOrganisatorisches. Ü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
MehrProgrammieren 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 \\"
1.2. Datentypen Zeichenketten: Zeichenkettenliterale wie»üblich«"eine Zeichenkette\nmit Doppelapostroph \" und Backslash \\" werden als 0-terminierte char-felder realisiert char* hello = "Hello, World";
MehrVariablen. 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!
MehrArrays 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
MehrC-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)
MehrProgrammieren 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
MehrArrays 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
MehrESP 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];
MehrINE1 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)
MehrTeil 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
MehrVektoren 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
Mehr7 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
MehrProgrammiertechnik. 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
MehrInformatik 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
MehrF 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
MehrSoftware 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
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[])
Mehreinlesen 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
MehrGrundlagen 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
MehrZeichenketten (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
Mehr6. 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)
MehrOperatoren 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;
MehrSystempraktikum 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
MehrZusammenfassung 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 Übungsziele: Skript: Deklaration und Verwendung eindimensionaler Arrays Kapitel: 33 Semester: Wintersemester 2016/17 Betreuer: Kevin, Matthias, Thomas und Ralf Synopsis:
MehrC 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
MehrEin- 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
MehrEinfü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
MehrArrays,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
MehrFunktionen. Datentypen Zeiger. Vorlesung Computergrundlagen WS 2010/2011, x y = x + 6
Funktionen Datentypen Zeiger #include void init(float a) { if (a
MehrComputergrundlagen 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
MehrZeiger, 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
MehrJAVA 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
MehrEinfü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
MehrTyp : void* aktuelle Parameter Pointer von beliebigem Typ
2. Funktionen - Prototypvereinbarung typangabe funktionsname(parameterliste); - Funktionsdefinition typ funktionsname(parameterliste){ Anweisung - Funktionstyp -> Typ der Funktionswertes zulaessige Typangaben
MehrZeiger. 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
MehrOrganisatorisches. 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
MehrEin- 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
MehrWoche 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.
Mehr3D 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
MehrProgrammiersprachen 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
MehrNachdem 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
MehrInput, 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
Mehr6 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)
MehrTeil 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
MehrEin-/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
MehrEin- 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
MehrModellierung 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
MehrGI 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
MehrAusgewä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");
MehrOutline. 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
MehrGrundlagen 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.
MehrThemen. 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
MehrGrundlagen 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.
Mehr10 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
MehrEin- 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
Mehr1. 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
MehrTeil 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
MehrU23 - 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
MehrBereits 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
MehrElementare 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
MehrBereits 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
MehrEmbedded 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);
MehrZeiger 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,
MehrZeiger. 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
MehrDatei: 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
MehrEinfü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() Übungsziele Skript In diesem Übungspaket üben wir das dynamische Alloziieren 1. und Freigeben von Speicherbereichen 2. von Zeichenketten
MehrDynamischer 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
MehrEinfü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,
MehrInformatik - Ü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
Mehr4.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
MehrTeil 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
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");
MehrZeiger 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() Übungsziele: Skript: In diesem Übungspaket üben wir das dynamische Alloziieren 1. und Freigeben von Speicherbereichen 2. von Zeichenketten
MehrSchwerpunkte. 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
MehrEinfü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
MehrFunktionen, 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
MehrCrashkurs 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
MehrEinfü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
MehrJAVA 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
MehrZeichendarstellung. 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
Mehr5.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