Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training,
learning paths, books, tutorials, and more.

Storage Allocation

When we declare a pointer in C, a certain amount of space is allocated for it,
just as for other types of variables. Pointers generally occupy one machine word, but their size can
vary. Therefore, for portability, we should never assume that a
pointer has a specific size. Pointers often vary in size as a result
of compiler settings and type specifiers allowed by certain C
implementations. It is also important to remember that when we declare
a pointer, space is allocated only for the pointer itself; no space is
allocated for the data the pointer references. Storage for the data is
allocated in one of two ways: by declaring a variable for it or by
allocating storage dynamically at runtime (using
malloc or realloc, for
example).

When we declare a variable, its type tells the compiler how much
storage to set aside for it as the program runs. Storage for the
variable is allocated automatically, but it may not be persistent
throughout the life of the program. This is especially important to
remember when dealing with pointers to automatic
variables. Automatic variables are those for which storage is allocated and
deallocated automatically when entering and leaving a block or
function. For example, since iptr is set to
the address of the automatic variable a in
the following function f,
iptr becomes a dangling pointer when
f returns. This situation occurs because once
f returns, a is no
longer valid on the program stack (see Chapter 3).

int f(int **iptr) { int a = 10; ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training,
learning paths, books, interactive tutorials, and more.