Follow Techotopia on Twitter

On-line Guides
All Guides
eBook Store
iOS / Android
Linux for Beginners
Office Productivity
Linux Installation
Linux Security
Linux Utilities
Linux Virtualization
Linux Kernel
System/Network Admin
Programming
Scripting Languages
Development Tools
Web Development
GUI Toolkits/Desktop
Databases
Mail Systems
openSolaris
Eclipse Documentation
Techotopia.com
Virtuatopia.com
Answertopia.com

How To Guides
Virtualization
General System Admin
Linux Security
Linux Filesystems
Web Servers
Graphics & Desktop
PC Hardware
Windows
Problem Solutions
Privacy Policy

  




 

 

The GNU C Programming Tutorial - Pointer types

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.)

 
 
  Published under free license. Design by Interspire