x = 25;
foo = &x; bar = x;
Let the address of x = 123;
then the value of foo = 123 and bar = 25.
We can dereference a variable using Asterisk (*)
bas = *foo;
This can be said "bas equal to value pointed by foo."
The reference and dereference operators are complementary.
bas = foo; // bas equal to foo (123) bas = *foo; // bas equal to value pointed to by foo (25)
Here is a quick script I wrote that gives a quick demonstration of pointers, how they relate with one another and the double pointers concept.
#include <stdlib.h>
int main() {
int* foo;
int* (*bar);
int val = 25;
foo = &val;
bar = &foo;
printf("Adr of val: %p\n", &val);
printf("Val of val: %p\n", val);
printf("Adr of foo: %p\n", &foo);
printf("Val of foo: %p\n", foo);
printf("Drf of foo: %p\n", *foo);
printf("Adr of *bar: %p\n", &bar);
printf("Val of *bar: %p\n", bar);
printf("Drf of *bar: %p\n", *bar);
return 0;
}
Output:
Adr of val: 0x7fff735c829c Val of val: 0x19 Adr of foo: 0x7fff735c82a8 Val of foo: 0x7fff735c829c Drf of foo: 0x19 Adr of *bar: 0x7fff735c82a0 Val of *bar: 0x7fff735c82a8 Drf of *bar: 0x7fff735c829c
Pointers to functions C++ allows operations with pointers to functions. The use of this is for passing a function as an argument to another function.
Pointers to functions are declared with the same syntax as a regular function declaration, except that the name of the function is enclosed between parentheses () and an asterisk (*) is inserted before the name:
// pointer to functions
#include <iostream>
using namespace std;
int addition (int a, int b)
{ return (a+b); }
int subtraction (int a, int b)
{ return (a-b); }
int operation (int x, int y, int (*functocall)(int,int))
{
int g;
g = (*functocall)(x,y);
return (g);
}
int main ()
{
int m,n;
int (*minus)(int,int) = subtraction;
m = operation (7, 5, addition);
n = operation (20, m, minus);
cout <<n;
return 0;
}
In the example above, minus is a pointer to a function that has two parameters of type int. It is directly initialized to point to the function subtraction.
Yet Another Example
typedef int (*t_somefunc)(int,int);
int product(int u, int v) {
return u*v;
}
t_somefunc afunc = &product;
...
int x2 = (*afunc)(123, 456); // call product() to calculate 123*456
Sources:
http://www.cplusplus.com/
http://www.stackoverflow.com/