Go4Expert

Go4Expert (http://www.go4expert.com/)
-   C (http://www.go4expert.com/articles/c-tutorials/)
-   -   Pointer overview (http://www.go4expert.com/articles/pointer-overview-t1271/)

Jaihind 26Aug2006 12:42

Pointer overview
 
Pointer
Pointer is a declared like a variable, but it's not an ordinary variable, it's a fancy variable, that can store address of the another variable. Pointer is very much useful for allocating memory at run time , that's dynamic allocation. Pointers are said to "point to" the variable whose reference they store ( * - Dereference operator ).

See the Following Declarations

int *iA; // integer pointer
char *szB; // character pointer
float *fC; // floating pointer

Here iA, szB and fC are pointer variables, the variables capable of holding addresses.

Main features of pointer
  1. To Reduce the wastage of Memory
  2. Increase the Programming Speed
  3. Data manipulations (Linked list , Stack , Queue , trees.., )

int a[]={10,20,30,40,50};
int *ptr=&a[0];

ptr contains base address of array ' a '
base address points first element of an array 'a'

Pointer Supports Dynamic Memory Management

Windows "C "
Code: CPP

int a[10];         
int *p;      
p= (int *)malloc(sizeof(a));                         
free(p);

Code: CPP

int b[10][10];
int **q;
*q=(int *)malloc(sizeof(b));
free(*p);

Windows "C++"

Code: CPP

int a[10];
int *p=new int[sizeof(a)];
delete []p;

Code: CPP

int b[10][10];
int **q;
*q=new int[sizeof(b)];
delete []*q;

Using the above functions you can effectively manage ( allocate and deallocate ) memory.

Function Pointers

Pointer can also point to a function , This function have addresses .
Code: CPP

int (*Ptr)( );
int Result();
Ptr=Result;  // Assign Address of function
 

This above declaration Pointer to a Function , No Arguments which returns an integer.

Pointer to a function with arguments .

Code: CPP

int (*PtrToFunction) (int  iX, int  iY);
int SumofIntegers (int iX,int iY);
PtrToFunction = SumofIntegers;

Function Returning Pointers

As the function has a return type it can return an int, float or any other data type. Similarly it can return a pointer .
Code: CPP

int *ptr;
int *MyFun();
ptr=MyFun();

Pointer to an Array

We have already seen, Pointer to int / pointer to float, can we also have pointer to an array? The answer is yes. See below.
Code: CPP

int a[][5]={1,2,3,4,5,6,7,8,9,10};
int (*Ptr)[5];
Ptr=a;

Ptr is a pointer to an array of 5 integers .

Array of Pointers

We know that array of int , array of float and so similarly array of pointers. Array of pointers contains collection of addresses. Let us consider the below example

Code: CPP

int  *array[3];
int i=10,j=20,k=30;
array[0]=&i;
array[1]=&j;
array[2]=&k;

Structure Pointer

We know that pointer pointing to int / char , Similarly Pointer an point to user defined data types like structures / classes. Let us consider the below example

Code: CPP

struct sJames
{
    int m_iNumber;
    char *m_szName;
};

struct sJames Obj={7126,"James"};
struct sJames *ptr=&Obj;
cout<<ptr->m_iNumber<<endl;
cout<<ptr->m_szName<<endl;

Void Pointer

void pointer is something like pointer pointing to nothing and is a generic pointer. It can be type casted to any other data type.

Code: CPP

void *ptr;
int *p;
int a=10;
ptr=&a;
p=(int *)ptr;
cout<<*p<<endl;

Const Pointer
const variable normally tells the compiler that you should not allow modification of a particular variable in the program.

const char *str1="James"; //String is Constant Pointer is not
char *const str2="James"; // Pointer is Constant String is not

Example
Code: CPP

char a[]= "prasanna";
str1 = a; // ok
cout << str1<<endl;
//str2 = a; // illegal
str1 = &a[0]; // ok
 

Null Pointer
Null pointer is a pointer points to NULL that's equal to integer zero.

Code: CPP

int  *Null_Ptr;
Null_Ptr = NULL; // null pointer
 

Note:
Without initialization is better than empty initialization.

Memory Leaks

Memory leak is a big problem using pointers , But if we allocate memory for a particular structure / class / single variable, Proper memory De-allocation is necessary.

To avoid memory errors using pointers

1) Memory allocation without de allocation.
2) With out memory allocation , But de allocation.
3) Memory allocation , De allocation , But again unnecessary de allocation.

coderzone 26Aug2006 19:35

Re: Pointer overview
 
Offtopic comment:
I have gone through almost all your articles and I really like your articles.Good luck

Quote:

Originally Posted by Jaihind
Note:
Without initialization is better than empty initialization.

I guess you are saying the opposite. Its always better to initialize to nothing rather than have it pointed to something.

prem_may10 29Sep2006 11:54

Re: Pointer overview
 
hi,
I want to print hello world without using semicolon(;) in the program

shabbir 29Sep2006 16:04

Re: Pointer overview
 
Quote:

Originally Posted by prem_may10
hi,
I want to print hello world without using semicolon(;) in the program

Prem, Please put your query as a seperate thread in the Queries and discussion forum. Dont ask your queries as a comments to the articles as that may not eventually get you a reply.

aisha.ansari84 5Mar2008 18:49

Re: Pointer overview
 
nice info

rahul.mca2001 6Mar2008 13:19

Re: Pointer overview
 
can we type cast a null pointer


All times are GMT +5.5. The time now is 07:42.