lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


G'day,

I see people getting conflating the names, and then getting confused
by, two different, but similar-seeming things:

        1. The character NUL ('\0'); versus

        2. The NULL pointer ((void *) 0).

1. Characters.

By definition, sizeof(char) == 1.  This is even if the underlying architecture
(e.g. some DSP platforms) actually has 32-bit characters.  When potential
confusion arises because of the width of "char", standards often use the term
"octet" to refer to an 8-bit group.

The name NUL comes from ASCII.

Using memset to set some character(s) to all-bits-0 will set all characters
to NUL.

2. Pointers

C defines any pointer that reads as 0, or is written to as 0, as a NULL
pointer, guaranteed to be different to any valid pointer.  As others have
said, the OS/runtime/compiler may choose any value "under the surface",
but it will always read and write as 0 when used in a standards-compliant
fashion at the abstract C code level.

Bottom line:
1. Never use "null" -- it's too vague;
2. If talking strictly about characters, use NUL and/or NULs;
3. If talking strictly about pointers, use NULL and/or NULLs.

4. memset can set a memory area (e.g. sizeof(struct thingy) to
   "all-bits-0".  This may make the struct (more deterministic to
   reason about.  However, after memset, all pointers in the struct
   should be explicitly set to NULL.

Hope this helps,

sur-behoffski (Brenton Hoff)
programmer, Grouse Software