&
a dereference *
.
Určete výstupy následujících výpisů a ověřte implementací a spuštěním programu.
int x = 10; // Celočíselná proměnná x int *px = &x; // Proměnná typu ukazatel na proměnnou typu int, inicializovaná na printf("px = %p\n", px); // Tisk hodnoty ukazatele printf("*px = %d\n", *px); // Tisk hodnoty uložené na adrese, kterou ukazatel obsahuje
char c = 10; // Definice proměnné c typu char int x = 10; // Definice proměnné x typu int int *px = &x; // Definice proměnné px typu ukazatel na proměnnou typu int char *pc = &c; // Definice proměnné pc typu ukazatel na proměnnou typu char printf("sizeof(c) = %ld (%ld)\n", sizeof(c), sizeof(char)); // Tisk paměťové velikosti proměnné c a typu char printf("sizeof(x) = %ld (%ld)\n", sizeof(x), sizeof(int)); // Tisk paměťové velikosti proměnné x a typu int printf("sizeof(px) = %ld (%ld)\n", sizeof(px), sizeof(int*));// Tisk paměťové velikosti proměnné px a typu int* printf("sizeof(pc) = %ld (%ld)\n", sizeof(pc), sizeof(char*));// Tisk paměťoé velikosti proměnné pc a typu char* printf("px: %p\n", px); // hodnota ukazatele px (adresa x) printf("pc: %p\n", pc); // hodnota ukazatele pc (adresa c) printf("(pc - px) = %ld\n", (pc - (char*)px)); // rozdíl adress
int x; // definice proměnné typu int (o velikost 4 bajty). char *pcx = (char*)&x; // definice proměnné typu ukazatel na char, inicializace adresou, kde je uložena proměnná x. pcx[0] = 'a'; pcx[1] = 'b'; pcx[2] = 'c'; pcx[3] = '\0'; printf("x = %d\n", x); printf("&x = %p\n", &x); printf("&x = %s\n", &x);
rand()
ze stdlib.h
.
stdout
ve formě “Array address %p\n” a následně jednotlivé prvky na samostatném řádku ve formátu “array[%d] = %d, adress %2lu”, kde první číslo je index (pořadí) prvku pole, druhé je hodnota prvku, a třetí je adresa prvku v paměti.
int array[] = {5, -6, 0, 8, -9, 3, 1, -4}; int *up = array; int **uup = &up; printf("array[1] = %d \n", array[1]); printf("array[1] + 4 = %d \n", array[1] + 4); printf("(array + 1)[2] = %d \n", (array + 1)[2]); printf("*up = %d \n", *up); printf("*up + 4 = %d \n", *up + 4); printf("*(up + 1) = %d \n", *(up + 1)); printf("**uup = %2d \n", **uup); printf("*(*uup + 2) = %2d \n", *(*uup + 2)); printf("**uup + 4 = %2d \n", **uup + 4);