#include <stdio.h> int main(void) { int buffer; // An integer are declare int *pointer; // A pointer to an integer are declared buffer=512; // The buffer are set to 512 pointer=&buffer; // Pointer gets assigned the _adress_ that buffer points at printf("Pointer points at [%i]\n",*pointer); // Print the content of whatever pointer points at printf("Pointer contains [%i]\n",pointer); // Print the adress that pointer points at printf("Buffer contains [%i]\n",buffer); // Print the content of the buffer printf("Changing values\n"); // To demonstrate i change the value of buffer // and reprint the values buffer=1024; printf("Pointer points at [%i]\n",*pointer); // Print the content of whatever pointer points at printf("Pointer contains [%i]\n",pointer); // Print the adress that pointer points at printf("Buffer contains [%i]\n",buffer); // Print the content of the buffer printf("Changing values\n"); // To demonstrate once again *pointer=2048; // We now want to change buffer by using the pointer printf("Pointer points at [%i]\n",*pointer); // Print the content of whatever pointer points at printf("Pointer contains [%i]\n",pointer); // Print the adress that pointer points at printf("Buffer contains [%i]\n",buffer); // Print the content of the buffer } Generates following output: bash-2.05b$ ./a.out Pointer points at [512] Pointer contains [-1073745188] Buffer contains [512] Changing values Pointer points at [1024] Pointer contains [-1073745188] Buffer contains [1024] Changing values Pointer points at [2048] Pointer contains [-1073745188] Buffer contains [2048] Whats it good for? Give me some examples! Very simple example would be a sub-routine that does work on several values and returns more than one result, as follow: #include <stdio.h> int multi(ap,bp,cp) // Function that works on 3 pointers int *ap,*bp,*cp; { int temp; *ap=*bp + *cp; // add the values of c and b and store the result in a temp=*bp; // Swap bp and bc *bp=*cp; *cp=temp; } int main(void) { // Practical exampel on use of pointers int a,b,c; a=b=c=0; printf("Initated values\n"); printf("A:[%i] B:[%i] C:[%i]\n",a,b,c); a=3;b=2;c=1; // Random test values printf("\nRandom test values\n"); printf("A:[%i] B:[%i] C:[%i]\n",a,b,c); multi(&a,&b,&c); // Calling function, passing on addresses for a,b and c printf("\nAfter multi values\n"); printf("A:[%i] B:[%i] C:[%i]\n",a,b,c); } Generates following output: bash-2.05b$ ./a.out Initated values A:[0] B:[0] C:[0] Random test values A:[3] B:[2] C:[1] After multi values A:[3] B:[1] C:[2]