Given a variable var of type t and a
variable var_ptr of type pointer to t (t
*), it possible to assign
var_ptr = &var
The following example shows the declaration and value assignment of pointers (file pointer_example_1.c):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <stdio.h>
int main()
{
int num1, num2;
int *ptr1, *ptr2;
ptr1 = &num1;
ptr2 = &num2;
num1 = 10;
num2 = 20;
ptr1 = ptr2;
ptr2 = NULL;
return 0;
}
|
Lines 4 and 5 define two integers and two pointers to
integer respectively. Pointers behave like the rest of variables, they have
no initial value. Lines 7 and 8 assign the memory address of the integer
variables to the two pointers. The address of a variable exists from the
beginning of a program, and therefore, these assignments are correct despite
the fact that no value has been yet stored in the variables
num1 and num2.
This is a common source of anomalies. The address of a variable may be obtained at any point in the program. A common error is to assign the address of an uninitialized variable to a pointer. The pointer value is correct, but the value it points to is not. In the previous example, before line 10, the two pointers are initialized, but the values they point to, are not.
Line 13 is a pointer assignment. The value of
ptr2 is the address of num2 as it was assigned
previously. As a result, ptr1 contains now also the address of
num2.
Line 14 assigns to pointer ptr2 the constant
NULL defined in the stdio.h included in
the first line of the program. This constant represents the “empty
pointer”. Its numeric value is zero, and whenever a pointer has this
value, it is pointing to nothing.
The following figure shows the evolution for the variables in the program at different execution points. The memory addresses where the variables are stored are arbitrary.

Copy and paste the content of the previous program in a text file in your development environment. Compile to check its syntactic correctness. Make changes in the declarations and assignments, and re-compile to check correctness.