Search
&
*
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
Otázky k diskuzi
px
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 zabere víc místa v paměti než char.
int
char
*px
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);
x
rand()
stdlib.h
stdout
Příklad výstupu
Array address 0x820ff2ba0 array[0] = 91, relative address 0x00 array[1] = 10, relative address 0x04 array[2] = 93, relative address 0x08 array[3] = 18, relative address 0x0c array[4] = 56, relative address 0x10 array[5] = 44, relative address 0x14 array[6] = 57, relative address 0x18 array[7] = 92, relative address 0x1c array[8] = 13, relative address 0x20 array[9] = 84, relative address 0x24
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);