- sizeof
- Strukturen
- File-IO
- Dynamischer Speicher
- Testen
- Demo und Design

sizeof Operatorsizeof ist keine Funktion!!!
Funktioniert nur für Größen, die zur Kompilierzeit bekannt sind
int charsize = sizeof(char);
int ptrsize = sizeof(int*);
int size = sizeof("Hallo");int x[20]; int len = sizeof(x) / sizeof(x[0]);
int x[20]; int* y = x; int len = sizeof(y) / sizeof(y[0]);
char* hallo = "Hallo"; int size = sizeof(hallo);
#include <stdio.h>
struct _Person_ {
char* name;
int age;
};
int main()
{
struct _Person_ petra;
petra.name = "Petra";
petra.age = 17;
return 0;
}
typedef:
[...]
struct _Person_ {
char* name;
int age;
};
typedef struct _Person_ Person;
[...]
Person petra;
petra.name = "Petra";
petra.age = 17;
[...]
struct _Person_ {
char* name;
int age;
struct _Person_* father;
struct _Person_* mother;
};
Funktioniert, da Pointer immer gleich groß sind (4 bzw. 8 Byte).
Für viele Datenstrukturen benötigt (z.B. Baum, Linked List).
struct in Datei speichernstructs können in Binärdateien gespeichert werden
[...]
struct _Phone_ {
int country_code;
int number;
}__attribute__((packed));
[...]
struct _Phone_ number;
number.number = 1234567;
number.country_code = 43;
FILE* file = fopen("phone_numbers", "wb"); // wb = write binary
fwrite(&number, sizeof(struct _Phone_), 1, file);
fclose(file);
struct in Datei gespeichert werden soll,
entfernt unnötige Padding-Bytes.
|
|
||||||||||||||||||||||||
struct aus Datei lesenstructs können aus Binärdateien geladen werden:
[...]
struct _Phone_ {
int country_code;
int number;
}__attribute__((packed));
[...]
struct _Phone_ number;
FILE* file = fopen("phone_numbers", "rb"); // rb = read binary
fread(&number, sizeof(struct _Phone_), 1, file);
fclose(file);
int in einer Datei aus?78 56 34 12long size; fseek(file, 0, SEEK_END); size = ftell(file); fseek(file, 0, SEEK_SET);
size an (in Bytes angegeben)|
1int main()
{
2 int* mem = (int*)malloc(sizeof(int) * 2);
3 if(mem == NULL) return 0;
4 *mem = 1;
5 *(mem + 1) = 2;
6 mem[0] = 3;
7 mem[1] = 4;
8 free(mem);
return 0;
}
|
Heap:
Heap:
Heap:
Heap:
Heap:
Heap:
Heap:
Heap:
|
NULL initialisierenfree auf NULL setzenmalloc/realloc auf NULL überprüfenrealloc Hilfspointer verwenden:
char* text = (char*)malloc(8 * sizeof(char));
char* new_text = (char*)realloc(text, 16 * sizeof(char));
if(new_text != NULL)
{
text = new_text;
}
else
{
free(text);
printf("Out of memory!\n");
}
Abgabeschluss: