Node:Pointer types, Next:, Previous:Pointer operators, Up:Pointers



Pointer types

Pointers can point to any type of variable, but they must be declared to do so. A pointer to an integer is not the same type of variable as a pointer to a float or other variable type. At the "business end" of a pointer is usually a variable, and all variables have a type.

Here are some examples of different types of pointer:

int *my_integer_ptr;

char *my_character_ptr;

float *my_float_ptr;

double *my_double_ptr;

However, GCC is fairly lenient about casting different types of pointer to one another implicitly, or automatically, without your intervention. For example, the following code will simply truncate the value of *float_ptr and print out 23. (As a bonus, pronunciation is given for every significant line of the code in this example.)

#include <stdio.h>
/* Include the standard input/output header in this program */

int main()
/* Declare a function called main that returns an integer
   and takes no parameters */
{
  int *integer_ptr;
  /* Declare an integer pointer called integer_ptr */

  float *float_ptr;
  /* Declare a floating-point pointer called float_ptr */

  int my_int = 17;
  /* Declare an integer variable called my_int
     and assign it the value 17 */

  float my_float = 23.5;
  /* Declare a floating-point variable called my_float
     and assign it the value 23.5 */

  integer_ptr = &my_int;
  /* Assign the address of the integer variable my_int
     to the integer pointer variable integer_ptr */

  float_ptr = &my_float;
  /* Assign the address of the floating-point variable my_float
     to the floating-point pointer variable float_ptr */

  *integer_ptr = *float_ptr;
  /* Assign the contents of the location pointed to by
     the floating-point pointer variable float_ptr
     to the location pointed to by the integer pointer variable
     integer_ptr (the value assigned will be truncated) */

  printf ("%d\n\n", *integer_ptr);
  /* Print the contents of the location pointed to by the
     integer pointer variable integer_ptr */

  return 0;
  /* Return a value of 0, indicating successful execution,
     to the operating system */

}

There will still be times when you will want to convert one type of pointer into another. For example, GCC will give a warning if you try to pass float pointers to a function that accepts integer pointers. Not treating pointer types interchangeably will also help you understand your own code better.

To convert pointer types, use the cast operator. (See The cast operator.) As you know, the general form of the cast operator is as follows:

(type) variable

Here is the general form of the cast operator for pointers:

(type *) pointer_variable

Here is an actual example:

int *my_integer_ptr;
long *my_long_ptr;

my_long_ptr = (long *) my_integer_ptr;

This copies the value of the pointer my_integer to the pointer my_long_ptr. The cast operator ensures that the data types match. (See Data structures, for more details on pointer casting.)