Home > DeveloperSection > Articles > Objective C - Pointers

Objective C - Pointers


iPhone iPhone  Ios  Objective C 
Ratings:
0 Comment(s)
 842  View(s)
Rate this:

 Objective C - Pointers


 Previously we seen the Program Structure of Objective C : Objective-C Program Structure

 

 

In Objective-C, Pointers are easy and fun to learn and it is widely used in any programming languages like c, c++, java, etc. Some Objective-C programming tasks are performed more easily with pointers, and other tasks, such as dynamic memory allocation, cannot be performed without using pointers.


Pointers in Objective-C are easy and fun to learn. Some Objective-C programming tasks are performed more easily with pointers, and other tasks, such as dynamic memory allocation, cannot be performed without using pointers.


Since every variable is a memory location and every memory location has its address defined which can be accessed using ampersand (&) operator, which denotes an address in memory

 

Let's look at the following example, which will print the address of the variables defined:

#import <Foundation/Foundation.h>

int main ()
{
   int  var1;       //declared var1 of int type
   char var2[10];   //declared var2 of char type hold upto 10

   NSLog(@"Address of var1 variable: %x\n", &var1  );
   NSLog(@"Address of var2 variable: %x\n", &var2  );

   return 0;
}

Output in Console:

2015-07-14 08:15:22.518 demo[24618] Address of var1 variable: 5bcc4ecc
2015-07-14 08:15:22.519 demo[24618] Address of var2 variable: 5bcc4ed0

 

Pointers?


A pointer is a variable whose value is the address of another variable, direct address of the memory location. Like any variable or constant, you must declare a pointer before you can use it to store any variable address

 

Syntax to declare pointers:

type *var-name;

 

Here, type is the pointer's base type; it must be a valid Objective-C data type and var-name is the name of the pointer variable. The asterisk * you used to declare a pointer is the same asterisk that you use for multiplication. However, in this statement the asterisk is being used to designate a variable as a pointer

 

Let's look at the following example which shows some of the valid pointer declaration:

int    *ip;           /* pointer to an integer */

double *dp;     /* pointer to a double */

float  *fp;        /* pointer to a float */

char   *ch;        /* pointer to a character */

The actual data type of the value of all pointers, whether integer, float, character, or otherwise, is the same, a long hexadecimal number that represents a memory address. The only difference between pointers of different data types is the data type of the variable or constant that the pointer points to

 

How to use Pointers ?

There are few important operations, which we will do with the help of pointers very frequently :

·         define a pointer variable

·         assign the address of a variable to a pointer

·         now access the value at the address available in the pointer variable

This is done by using unary operator * that returns the value of the variable located at the address specified by its operand.

 

Let's look at the following example:


#import <Foundation/Foundation.h>

int main ()
{
   int  var = 20;      /* actual variable declaration */
   int  *ip;              /* pointer variable declaration */
   ip = &var;          /* store the address of var in pointer variable*/
   NSLog(@"Address of var variable: %x\n", &var  );
   /* here, address stored in pointer variable */
   NSLog(@"Address stored in ip variable: %x\n", ip );
   /* now access the value using the pointer */
   NSLog(@"Value of *ip variable: %d\n", *ip );
  
   return 0;
}

When the above code is compile and executed, it will produce the following result:

2015-07-14 08:17:20.152 demo[25370] Address of var variable: 245afd4c
2015-07-14 08:17:20.154 demo[25370] Address stored in ip variable: 245afd4c
2015-07-14 08:17:20.154 demo[25370] Value of *ip variable: 20

 

NULL Pointers in Objective-C

It is always a good practice to assign a NULL value to a pointer variable in case you do not have exact address to be assigned. This is done at the time of variable declaration. A pointer that is assigned NULL is called a null pointer.

The NULL pointer is a constant with a value of zero defined in several standard libraries.

 

Let's look at the following example:

#import <Foundation/Foundation.h>

int main ()
{
   int  *ptr = NULL;
   NSLog(@"The value of ptr is : %x\n", ptr  );
   return 0;
}

When the above code is compile and executed, it will produce the following result:

2015-07-14 08:18:29.267 demo[26018] The value of ptr is : 0

 

On most of the operating systems, programs are not permitted to access memory at address 0 because that memory is reserved by the operating system. However, the memory address 0 has special significance; it signals that the pointer is not intended to point to an accessible memory location. But by convention, if a pointer contains the null (zero) value, it is assumed to point to nothing

To check for a null pointer, you can use an if statement as follows:

if(ptr)     /* succeeds if p is not null */

if(!ptr)    /* succeeds if p is null */

 

Objective-C Pointers in Detail

There are the following few important pointer concepts are :

Pointer Concept

Description

Objective-C : Pointer arithmetic

There are four arithmetic operators that can be used on pointers: ++, --, +, -

Objective-C : Pointer to pointer

Objective-C allows you to have pointer on a pointer and so on

Objective-C : Array of pointers

You can define arrays to hold a number of pointers

Return pointer from functions in Objective-C

Objective-C allows a function to return a pointer to local variable, static variable and dynamically allocated memory as well

Passing pointers to functions in Objective-C

Passing an argument by reference or by address both enable the passed argument to be changed in the calling function by the called function

 

Next, we will learn about : Objective-C : Blocks


Don't want to miss updates? Please click the below button!

Follow MindStick