---
title: "Objective C - Pointers"  
description: "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 a"  
author: "Tarun Kumar"  
published: 2015-07-07  
updated: 2017-11-29  
canonical: https://www.mindstick.com/articles/1811/objective-c-pointers  
category: "iphone"  
tags: ["iphone", "ios", "objective c"]  
reading_time: 5 minutes  

---

# 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](https://yourviews.mindstick.com/story/1911/7-programming-languages-you-can-learn-for-seo) like c, c++, java, etc. Some Objective-C programming tasks are performed more easily with pointers, and other tasks, such as dynamic [memory allocation](https://www.mindstick.com/forum/157955/what-is-dynamic-memory-allocation-in-c-and-how-is-it-used-to-allocate-memory-at-runtime), 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](https://www.mindstick.com/interview/23425/null-pointer-and-void-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](https://www.mindstick.com/articles/332551/operating-systems-trends-and-innovations-in-2023), programs are not permitted to [access memory](https://answers.mindstick.com/qa/102433/can-you-detail-the-functions-of-a-computer-s-random-access-memory-ram) at address 0 because that memory is reserved by the [operating system](https://answers.mindstick.com/qa/114592/which-mobile-operating-system-is-better-for-privacy-ios-or-android). 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](https://www.mindstick.com/forum/23052/using-if-statement-to-check-individual-value-returned-from-a-query) 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](https://www.mindstick.com/forum/157625/what-is-meant-by-arithmetic-operators-in-python) 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](https://answers.mindstick.com/qa/104742/explain-local-variable), [static variable](https://www.mindstick.com/forum/12657/static-variable-in-asp-dot-net) 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

---

Original Source: https://www.mindstick.com/articles/1811/objective-c-pointers

Copyright © MindStick Software Pvt. Ltd. This Markdown version is provided for developers, AI systems, and offline reading.
