C Language: Pointers

Difference between  int *p; and *p;

int *p; *p;
p is an integer type pointer variable which can store address of another variable of type integer. *p means value at p. i.e. value at address stored at p.

Example:

#include <stdio.h> 
#include<conio.h>
int main()
{
	int a=10;
  	int *p;
  	//clrscr();
  	p=&a;
  	printf("%d\n",a);   //value of a
  	printf("%d\n",&a);  //address of a
  	printf("%u\n",&a);  //address of a
  	printf("%u\n",p);   //address of a which is stored in p
  	printf("%d\n",*p);  //value at p i.e. value at address stored at p
	printf("%d\n",*(&a)); //value at address of a
	getch();
  	return(0);
}
/* Output */

10
6487572
6487572
6487572
10
10

* Address is always a positive integer
* A pointer variable always stores an address.
* Size of an integer variable is always 2 bytes
* So, size of a pointer variable is always 2 bytes

/* to display size of datatype and pointer variable */
#include<stdio.h>
#include<conio.h>
void main()
{
  int a=10,*ip;
  char c='A',*cp;
  float e=10.45f,*fp;
  double d=34.67,*dp;
  //clrscr();
  ip=&a;   cp=&c;   fp=&e;   dp=&d;
  printf("1. int %d %d\n",sizeof(a),sizeof(ip));
  printf("2. char %d %d\n",sizeof(c),sizeof(cp));
  printf("3. float %d %d\n",sizeof(e),sizeof(fp));
  printf("4. double %d %d\n",sizeof(d),sizeof(dp));

  printf("5. int %d\n",sizeof(*ip));
  printf("6. char %d\n",sizeof(*cp));
  printf("7. float %d\n",sizeof(*fp));
  printf("8. double %d\n",sizeof(*dp));
  getch();
}
/* Output */

Output When executed in Turboc3

1. int 2 2
2. char 1 2
3. float 4 2
4. double 8 2
5. int 2
6. char 1
7. float 4
8. double 8
int 2
char 1
float 4
double 8

Output When executed in CodeBlocks / DevC++

1. int 4 8
2. char 1 8
3. float 4 8
4. double 8 8
5. int 4
6. char 1
7. float 4
8. double 8

Pointer of pointer variables

A pointer of a pointer variable is a pointer variable that can store the address of another pointer variable of its own type.

Integer type pointer of pointer variable :

Integer type pointer of a pointer variable is a pointer variable that can store the address of another pointer variable of type integer.

float type pointer of pointer variable :

Float type pointer of a pointer variable is a pointer variable that can store the address of another pointer variable of type float.

int a=10;
int *p;
int **q;
p=&a;
q=&p;

a “a” is a normal int variable which can store an integer value
p “p” is an integer type pointer variable so it can store address of another variable of type integer.
Thus we can write
P=&a;
q

int **q;
q is an integer type pointer of pointer variable which can store address of another pointer variable of type integer.
Thus we can write
q=&p;