Header Ads

Pointer in detail - Objective C

 Pointer Arithmetic
Pointer have many but easy concept and they are very important to objective C programming. There are following few important pointer concepts, which should be clear to a Objective C programmer.Today we will learn about Pointer aritmetic.

Pointer Arithmetic
As explained in early basic of pointer, Objective C pointer is an address, which is a numeric value. Therefore, you can perform arithmetic operation on a pointer just as you can on a numeric value. There are four arithmetic operators that can be used on poiners ++,--,+ and -.

To understand pointer arithmetic, let us consider that ptr is an integer pointer, which points to the address 1000. Assuming 32-bit integers let us perform the following arithmetic operation on the pointer.

ptr++


Now, after the above operation, the ptr will point to the location 1004 because pointe each time ptr is incremented, it will point to the next integer location, which is  4 bytes next to the current location. This operation will move the pointer to next memory location without impacting actual value at the memory location. If ptr points  to a character whose address is 1000, the above operation will point to the location 1001 because next character will be available at 1001.

Incrementing a Pointer 

We prefer using a pointer in our program instead of an array because the variable pointer can be incremented, unlike the array name which cannot be incremented because it is a constant pointer. The Following program increments the variable pointer to access each succeeding element o the array.
 
#import <Foundation/Foundation.h>
const int MAX = 3;

int main()
{
     int var[] = {10, 100, 200 };
     int i, *ptr;
     
       // let us have array address in pointer
    ptr = var;
    for( i =0 ; i < MAX ; i++)
    {
         NSLog(@"Address of var[%d]  = %x\n", i, ptr);
         NSLog(@"Address of var[%d]  = %x\n", i, *ptr);

         // move the next location
     ptr++;
    return 0;
}


Decrementing a Pointer
The same consideration apply to a decrementing a pointer, which decreases its value by the number of bytes its data as shown below:
  
#import <Foundation/Foundation.h>
const int MAX = 3;

int main()
{
     int var[] = {10, 100, 200 };
     int i, *ptr;
     
       // let us have array address in pointer
    ptr = &var[MAX -1 ];

    for( i =MAX ; i > 0; i--)
    {
         NSLog(@"Address of var[%d]  = %x\n", i, ptr);
         NSLog(@"Address of var[%d]  = %x\n", i, *ptr);

         // move the next location
     ptr--;
    return 0;
}


Pointer Comparisons
Pointer may be compared by using relational operators, such as == , < and > . If p1 and p2 point variables that are related to each other, such as elements f the same array,then p1 and p2 can be meaningfully compared.
The following program modifies the previous example one by incrementing the variable pointer so long as the address to which it points is either less than or equal to the address of the last elements of they array,which is &var[MAX -1].

#import <Foundation/Foundation.h>
const int MAX = 3;

int main()
{
     int var[] = {10, 100, 200 };
     int i, *ptr;
     
       // let us have address of the first element in pointer
    ptr = var;
   
    for( i =0 ; ptr <= &var[MAX-1]; i++)
    {
         NSLog(@"Address of var[%d]  = %x\n", i, ptr);
         NSLog(@"Address of var[%d]  = %x\n", i, *ptr);

         //pointer to the previous location
     ptr++;
    return 0;
}


I hope you understand, if you want to we apply something new then comment or contact us and give feedback. 
 

No comments:

Powered by Blogger.