|
Quick Navigation Bar input/output and file i/o :: pointers :: arrays [ toc | forums ] |
Note: If the document URL does not begin with https://randu.org/tutorials/c/ then you are viewing a copy. Please direct your browser to the correct location for the most recent version. |
STOP! If you have not gone over Section 1: Simple C or do not completely understand what is going on, do not proceed. The following will make absolutely no sense if you have not read Section 1. Go back and re-read pages that are troubling you and practice before proceeding! If you are comfortable with the material discussed thus far, lets begin our journey into pointers...
* in front of the
variable identifier. For example:
int *ip; float *fp = NULL;This delcares a pointer, ip, to an integer. Let's say we want ip to point to an integer. The second line delares a pointer to a float, but initializes the pointer to point to the
NULL pointer.
The NULL pointer points to a place in memory that cannot
be accessed. NULL is useful when checking for error
conditions and many functions return NULL if they fail.
int x = 5; int *ip; ip = &x;We first encountered the
& operator first in the I/O
section. The & operator is to specify the address-of
x. Thus, the pointer, ip is pointing to x by assigning the address
of x. This is important. You must understand this concept.* operator. The *
dereferences the pointer to the value. So,
printf("%d %d\n", x, *ip);
would print 5 5 to the screen.int x = 0, y = 5, *ip = &y; x = *ip;The statement
int *ip = &y; is different than
x = *ip;. The first statement does not dereference,
the * signifies to create a pointer to an int. The second
statement uses a dereference.
void swap(int *x, int *y) {
int tmp;
tmp = *x;
*x = *y;
*y = tmp;
}
int main() {
int a = 2, b = 3;
swap(&a, &b);
return EXIT_SUCCESS;
}
This snip of swapping code works. When you call swap, you must
give the address-of a and b, because swap is expecting a pointer.const type qualifier can make things a little
confusing when it is used with pointer declarations.
const int * const ip; /* The pointer *ip is const and what it points at is const */
int * const ip; /* The pointer *ip is const */
const int * ip; /* What *ip is pointing at is const */
int * ip; /* Nothing is const */
As you can see, you must be careful when specifying the
const qualifier when using pointers.void pointers can be assigned to any pointer value.
It sometimes necessary to store/copy/move pointers without regard
to the type it references.void pointer.malloc, free, and
scanf utilize void pointers.int x = 5, *ip = &x; ip++;On a typical 32-bit machine, *ip would be pointing to 5 after initialization. But
ip++; increments the pointer 32-bits
or 4-bytes. So whatever was in the next 4-bytes, *ip would be pointing
at it.& and *.
The & operator gives the address-of a pointer. The
* dereferences the pointer (when not used in a pointer
declaration statement).const type qualifier.
You have to also be cautious about the void pointer.
Notice: Please do not replicate or copy these pages and
host them elsewhere. This is to ensure that the latest version can always
be found here.
Disclaimer: The document author has published these pages
with the hope that it may be useful to others. However, the document
author does not guarantee that all information contained on these
webpages are correct or accurate. There is no warranty, expressed or
implied, of merchantability or fitness for any purpose. The author does
not assume any liability or responsibility for the use of the information
contained on these webpages.
If you see an error, please send an email to the address below indicating
the error. Your feedback is greatly appreciated and will help to
continually improve these pages.