Ukazatel NULL:
Celočíselná konstanta nula(0) má různé významy v závislosti na tom, jak je použita. Ve všech případech se jedná o celočíselnou konstantu s hodnotou 0, jen je popsána různými způsoby.
Pokud je nějaký ukazatel porovnáván s hodnotou 0, pak se jedná o kontrolu, zda se nejedná o nulový ukazatel. Tato 0 se pak označuje jako konstanta nulového ukazatele. Standard C definuje, že 0 je typecast na (void *) je jak nulový ukazatel, tak konstanta nulového ukazatele.
Makro NULL je uvedeno v hlavičkovém souboru „stddef.h“.
Níže jsou uvedeny způsoby kontroly ukazatele NULL:
- Makro NULL je definováno pro porovnání rovné nulovému ukazateli jako:
if(pointer == NULL)
- Níže uvedený příkaz if implicitně kontroluje „není 0“, takže to obrátíme, aby to znamenalo „je 0“ jako:
if(!pointer)
Nulové znaky(‚\0‘):
„\0“ je definováno jako nulový znak. Je to znak se všemi bity nastavenými na nulu. Nemá to nic společného s ukazateli. ‚\0‘ je (stejně jako všechny znakové literály) celočíselná konstanta s hodnotou nula.
- Následující příkaz kontroluje, zda ukazatel řetězce ukazuje na nulový znak.
if (!*string_pointer)
- Následující příkaz kontroluje, zda ukazatel řetězce ukazuje na znak, který není nulový.
if (*string_pointer)
V jazyce C není řetězec nic jiného než pole typu char. V něm je každý ze znaků uložen v paměťovém prostoru o velikosti 1 bajtu. Každé pole je ukončeno znakem ‚\0‘ nebo nulovým znakem, ale pokud uvnitř řetězce uložíme znak ‚0‘, nejsou oba znaky podle jazyka C stejné. ‚0‘ znamená 48 podle tabulky ASCII, zatímco ‚\0‘ znamená 0 podle tabulky ASCII.
Below is the C program to print the value of ‚\0‘ and ‚0‘:
#include <stdio.h>
int
main()
{
printf
(
"\\0 is %d\n"
,
'\0'
);
printf
(
"0 is %d\n"
,
'0'
);
return
0;
}
\0 is 00 is 48