mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2025-08-14 10:45:06 +02:00
Merge pull request #3861 from caminsha/de-de/c/fix_whitespace
[c/de-de] made a whitespace after { character
This commit is contained in:
@@ -75,7 +75,7 @@ int add_two_ints(int x1, int x2); // Funktionsprototyp
|
|||||||
|
|
||||||
// Der Einstiegspunkt deines Programms ist eine Funktion mit dem Namen main und
|
// Der Einstiegspunkt deines Programms ist eine Funktion mit dem Namen main und
|
||||||
// einem Integer als Rückgabewert.
|
// einem Integer als Rückgabewert.
|
||||||
int main(void){
|
int main(void) {
|
||||||
// dein Programm
|
// dein Programm
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -87,7 +87,7 @@ int main(void){
|
|||||||
// Argumente beinhaltet.
|
// Argumente beinhaltet.
|
||||||
// argv[0] = Name des Programms
|
// argv[0] = Name des Programms
|
||||||
// argv[1] = erstes Argument usw.
|
// argv[1] = erstes Argument usw.
|
||||||
int main (int argc, char** argv){
|
int main (int argc, char** argv) {
|
||||||
// Ausgabe mit Hilfe von printf (print formatted)
|
// Ausgabe mit Hilfe von printf (print formatted)
|
||||||
// %d ist ein Integer.
|
// %d ist ein Integer.
|
||||||
// \n steht für eine neue Zeile
|
// \n steht für eine neue Zeile
|
||||||
@@ -303,19 +303,19 @@ int main (int argc, char** argv){
|
|||||||
////////////////////////////////////////////////
|
////////////////////////////////////////////////
|
||||||
// Kontrollstrukturen
|
// Kontrollstrukturen
|
||||||
////////////////////////////////////////////////
|
////////////////////////////////////////////////
|
||||||
if (0){
|
if (0) {
|
||||||
printf("Ich werde nie ausgeführt.");
|
printf("Ich werde nie ausgeführt.");
|
||||||
}
|
}
|
||||||
else if (0){
|
else if (0) {
|
||||||
printf("Ich werde auch nie ausgeführt.");
|
printf("Ich werde auch nie ausgeführt.");
|
||||||
}
|
}
|
||||||
else{
|
else {
|
||||||
printf("Ich gebe etwas aus.");
|
printf("Ich gebe etwas aus.");
|
||||||
}
|
}
|
||||||
|
|
||||||
// While-Schleifen existieren auch
|
// While-Schleifen existieren auch
|
||||||
int ii = 0;
|
int ii = 0;
|
||||||
while (ii < 10){ // JEDER Wert unter zehn ist wahr
|
while (ii < 10) { // JEDER Wert unter zehn ist wahr
|
||||||
printf("%d, " ii++); //i++ inkrementiert ii NACHDEM der Wert gebraucht
|
printf("%d, " ii++); //i++ inkrementiert ii NACHDEM der Wert gebraucht
|
||||||
// wurde.
|
// wurde.
|
||||||
} // => gibt folgendes aus: "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "
|
} // => gibt folgendes aus: "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "
|
||||||
@@ -323,16 +323,16 @@ int main (int argc, char** argv){
|
|||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
int kk = 0;
|
int kk = 0;
|
||||||
do{
|
do {
|
||||||
printf("%d, ", kk);
|
printf("%d, ", kk);
|
||||||
}while(++kk < 10); //++kk inkrementiert kk BEVOR der Wert gebraucht wurde.
|
} while(++kk < 10); //++kk inkrementiert kk BEVOR der Wert gebraucht wurde.
|
||||||
// => gibt folgendes aus: "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "
|
// => gibt folgendes aus: "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "
|
||||||
|
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
// In C gibt es auch for-Schleifen
|
// In C gibt es auch for-Schleifen
|
||||||
int jj;
|
int jj;
|
||||||
for (jj = 0; jj < 10; jj++){
|
for (jj = 0; jj < 10; jj++) {
|
||||||
printf("%d, ", jj);
|
printf("%d, ", jj);
|
||||||
} // => gibt folgendes aus: "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "
|
} // => gibt folgendes aus: "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "
|
||||||
|
|
||||||
@@ -342,14 +342,14 @@ int main (int argc, char** argv){
|
|||||||
// Schleifen und Funktionen müssen einen Rumpf haben. Wenn kein Rumpf gebraucht
|
// Schleifen und Funktionen müssen einen Rumpf haben. Wenn kein Rumpf gebraucht
|
||||||
// wird, kann folgendes gemacht werden:
|
// wird, kann folgendes gemacht werden:
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i <= 5; i++){
|
for (i = 0; i <= 5; i++) {
|
||||||
; // Semikolon wird als Rumpf behandelt (Null-Anweisung)
|
; // Semikolon wird als Rumpf behandelt (Null-Anweisung)
|
||||||
}
|
}
|
||||||
// Alternativ kann auch folgendes geschrieben werden:
|
// Alternativ kann auch folgendes geschrieben werden:
|
||||||
for (i = 0; i <= 5; i++);
|
for (i = 0; i <= 5; i++);
|
||||||
|
|
||||||
// Verzweigungen mit mehreren Möglichkeiten: `switch()`
|
// Verzweigungen mit mehreren Möglichkeiten: `switch()`
|
||||||
switch (a){
|
switch (a) {
|
||||||
case 0: // Labels müssen integrale *konstante* Ausdrücke sein (z.B. Enums)
|
case 0: // Labels müssen integrale *konstante* Ausdrücke sein (z.B. Enums)
|
||||||
printf("Hey, 'a' ist gleich 0!\n");
|
printf("Hey, 'a' ist gleich 0!\n");
|
||||||
break; //Wenn du kein break einsetzt, so geht der Kontrollfluss
|
break; //Wenn du kein break einsetzt, so geht der Kontrollfluss
|
||||||
@@ -441,7 +441,7 @@ int main (int argc, char** argv){
|
|||||||
int x_array[20]; // deklariert einen Array der Größe 20 (Größe kann
|
int x_array[20]; // deklariert einen Array der Größe 20 (Größe kann
|
||||||
// nicht geändert werden.)
|
// nicht geändert werden.)
|
||||||
int xx;
|
int xx;
|
||||||
for (xx =0; xx < 20; xx++){
|
for (xx =0; xx < 20; xx++) {
|
||||||
x_array[xx] 20 -xx;
|
x_array[xx] 20 -xx;
|
||||||
} // Initialisiere x_array zu 20, 19, 18, ... 2, 1
|
} // Initialisiere x_array zu 20, 19, 18, ... 2, 1
|
||||||
|
|
||||||
@@ -478,7 +478,7 @@ int main (int argc, char** argv){
|
|||||||
// aus dem Heap - dies kann auf eingebetteten Systemen unterschiedlichen sein.
|
// aus dem Heap - dies kann auf eingebetteten Systemen unterschiedlichen sein.
|
||||||
// Der C Standard sagt nichts darüber.)
|
// Der C Standard sagt nichts darüber.)
|
||||||
int *my_ptr = malloc(sizeof(*my_ptr) * 20);
|
int *my_ptr = malloc(sizeof(*my_ptr) * 20);
|
||||||
for (xx = 0; xx < 20; xx++){
|
for (xx = 0; xx < 20; xx++) {
|
||||||
*(my_ptr + xx) = 20 -xx; //my_ptr[xx] = 20-xx
|
*(my_ptr + xx) = 20 -xx; //my_ptr[xx] = 20-xx
|
||||||
} // initialisiere Speicher zu 20, 19, 18, 17, ... 2, 1 (als `int`)
|
} // initialisiere Speicher zu 20, 19, 18, 17, ... 2, 1 (als `int`)
|
||||||
|
|
||||||
@@ -497,7 +497,7 @@ int main (int argc, char** argv){
|
|||||||
// Füge dem Array ein Element hinzu
|
// Füge dem Array ein Element hinzu
|
||||||
size++;
|
size++;
|
||||||
my_array = realloc(my_array, sizeof(int) *size);
|
my_array = realloc(my_array, sizeof(int) *size);
|
||||||
if (my_array == NULL){
|
if (my_array == NULL) {
|
||||||
// Denke daran, realloc-Fehler zu prüfen
|
// Denke daran, realloc-Fehler zu prüfen
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -538,7 +538,7 @@ int main (int argc, char** argv){
|
|||||||
// Syntax einer Funktionsdeklaration
|
// Syntax einer Funktionsdeklaration
|
||||||
// <rueckgabe_wert> <funktions_name>(<args>)
|
// <rueckgabe_wert> <funktions_name>(<args>)
|
||||||
|
|
||||||
int add_two_ints(int x1, int x2){
|
int add_two_ints(int x1, int x2) {
|
||||||
return x1 + x2; // verwendet return, um einen Wert zurückzugeben
|
return x1 + x2; // verwendet return, um einen Wert zurückzugeben
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -555,14 +555,14 @@ Beispiel:
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// Eine `void`-Funktion gibt keinen Wert zurück
|
// Eine `void`-Funktion gibt keinen Wert zurück
|
||||||
void str_reverse(char *str_in){
|
void str_reverse(char *str_in) {
|
||||||
char tmp;
|
char tmp;
|
||||||
size_t ii = 0;
|
size_t ii = 0;
|
||||||
size_t size = strlen(str_in);
|
size_t size = strlen(str_in);
|
||||||
// `strlen()` ist ein Teil der C Standard-Bibliothek.
|
// `strlen()` ist ein Teil der C Standard-Bibliothek.
|
||||||
// Merke: Die Länge, welche von `strlen` zurückgegeben wird, ist ohne den
|
// Merke: Die Länge, welche von `strlen` zurückgegeben wird, ist ohne den
|
||||||
// Null-Byte Terminator.
|
// Null-Byte Terminator.
|
||||||
for (ii = 0; i < size /2; ii++){ // in C99 kann man `ii` hier deklarieren.
|
for (ii = 0; i < size /2; ii++) { // in C99 kann man `ii` hier deklarieren.
|
||||||
tmp = str_in[ii];
|
tmp = str_in[ii];
|
||||||
str_in[ii] = str_in[size - ii - 1]; //#ii'tes Zeichen vom Ende her
|
str_in[ii] = str_in[size - ii - 1]; //#ii'tes Zeichen vom Ende her
|
||||||
str_in[size - ii- 1] = tmp;
|
str_in[size - ii- 1] = tmp;
|
||||||
@@ -579,7 +579,7 @@ printf("%s\n", c), => "tseT nie tsi saD"
|
|||||||
|
|
||||||
// Weil wir lediglich eine Variable zurückgeben können, kann zum Ändern mehrerer
|
// Weil wir lediglich eine Variable zurückgeben können, kann zum Ändern mehrerer
|
||||||
// Variablen das Konzept call-by-reference verwendet werden.
|
// Variablen das Konzept call-by-reference verwendet werden.
|
||||||
void swap_two_numbers(int *a, int *b){
|
void swap_two_numbers(int *a, int *b) {
|
||||||
int temp = *a;
|
int temp = *a;
|
||||||
*a = *b;
|
*a = *b;
|
||||||
*b = temp;
|
*b = temp;
|
||||||
@@ -600,9 +600,9 @@ Größe eines dynamischen Arrays herausgefunden werden kann.
|
|||||||
*/
|
*/
|
||||||
// Die Größe des Arrays muss unbedingt mitgegeben werden.
|
// Die Größe des Arrays muss unbedingt mitgegeben werden.
|
||||||
// Sonst hat die Funktion keine Ahnung wie groß das Array ist.
|
// Sonst hat die Funktion keine Ahnung wie groß das Array ist.
|
||||||
void print_int_arrray(int *arr, size_t size){
|
void print_int_arrray(int *arr, size_t size) {
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < size; i++){
|
for (i = 0; i < size; i++) {
|
||||||
printf("arr[%d] ist %d\n", i, arr[i]);
|
printf("arr[%d] ist %d\n", i, arr[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -615,7 +615,7 @@ print_int_array(my_array, size);
|
|||||||
// Wenn man auf externe Variable (außerhalb der Funktion) referenziert, sollte
|
// Wenn man auf externe Variable (außerhalb der Funktion) referenziert, sollte
|
||||||
// man das Schlüsselwort `extern` verwenden.
|
// man das Schlüsselwort `extern` verwenden.
|
||||||
int i = 0;
|
int i = 0;
|
||||||
void test_function(){
|
void test_function() {
|
||||||
extern int i; // i braucht nun die externe Variable i
|
extern int i; // i braucht nun die externe Variable i
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -643,7 +643,7 @@ my_type my_type_var = 0;
|
|||||||
|
|
||||||
// Structs sind lediglich Sammlungen von Daten, die Inhalte werden
|
// Structs sind lediglich Sammlungen von Daten, die Inhalte werden
|
||||||
// (in der Reihenfolge wie sie geschrieben wurden) sequentiell alloziert.
|
// (in der Reihenfolge wie sie geschrieben wurden) sequentiell alloziert.
|
||||||
struct rectangle{
|
struct rectangle {
|
||||||
int width;
|
int width;
|
||||||
int height;
|
int height;
|
||||||
};
|
};
|
||||||
@@ -653,7 +653,7 @@ struct rectangle{
|
|||||||
// Dies ist so, weil potentiell ein Padding zwischen den Struktur-Inhalten
|
// Dies ist so, weil potentiell ein Padding zwischen den Struktur-Inhalten
|
||||||
// möglich ist). (siehe [1, Englisch])
|
// möglich ist). (siehe [1, Englisch])
|
||||||
|
|
||||||
void function_1(){
|
void function_1() {
|
||||||
struct rectangle my_rectangle;
|
struct rectangle my_rectangle;
|
||||||
|
|
||||||
// Greife auf Struct-Inhalte mit `.` zu.
|
// Greife auf Struct-Inhalte mit `.` zu.
|
||||||
@@ -674,13 +674,13 @@ void function_1(){
|
|||||||
// Aus Bequemlichkeitsgründen ist es möglich einem `struct` ein `typedef` hinzuzufügen.
|
// Aus Bequemlichkeitsgründen ist es möglich einem `struct` ein `typedef` hinzuzufügen.
|
||||||
typedef struct rectangle rect;
|
typedef struct rectangle rect;
|
||||||
|
|
||||||
int area(rect r){
|
int area(rect r) {
|
||||||
return r.width * r.height;
|
return r.width * r.height;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wenn du große Structs hast, kannst du diese mit dem Pointer kopieren,
|
// Wenn du große Structs hast, kannst du diese mit dem Pointer kopieren,
|
||||||
// damit große Kopiervorgänge vermieden werden.
|
// damit große Kopiervorgänge vermieden werden.
|
||||||
int area_ptr(const rect *r){
|
int area_ptr(const rect *r) {
|
||||||
return r->width * r->height;
|
return r->width * r->height;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -697,7 +697,7 @@ Wie auch immer, die Syntax kann zu Beginn verwirrend wirken.
|
|||||||
|
|
||||||
Zum Beispiel: Verwende str_reverse von einem Pointer
|
Zum Beispiel: Verwende str_reverse von einem Pointer
|
||||||
*/
|
*/
|
||||||
void str_reverse_through_pointer(char *str_in){
|
void str_reverse_through_pointer(char *str_in) {
|
||||||
// Definiere eine Funktionspointer-Variable, welche f genannt wird.
|
// Definiere eine Funktionspointer-Variable, welche f genannt wird.
|
||||||
void (*f)(char *); // Signatur sollte genau der Funktion entsprechen.
|
void (*f)(char *); // Signatur sollte genau der Funktion entsprechen.
|
||||||
f = &str_reverse; // weise die Adresse der wirklichen Funktion zu
|
f = &str_reverse; // weise die Adresse der wirklichen Funktion zu
|
||||||
@@ -823,7 +823,7 @@ befindet wie die C-Quelldatei.
|
|||||||
|
|
||||||
// Strukturen und Typendefinitionen können verwendet werden, um die Konsistenz
|
// Strukturen und Typendefinitionen können verwendet werden, um die Konsistenz
|
||||||
// zwischen unterschiedlichen Dateien beizubehalten.
|
// zwischen unterschiedlichen Dateien beizubehalten.
|
||||||
typedef struct Node{
|
typedef struct Node {
|
||||||
int value;
|
int value;
|
||||||
struct Node *next;
|
struct Node *next;
|
||||||
}Node;
|
}Node;
|
||||||
|
Reference in New Issue
Block a user