C 8
C 8
Pointer
Pointer is a variable whose value is the address of another variable
int a=123;
1002 1003 Address
0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 Content
a Name given to address
Figure 1: Storing a value using a variable in any memory address
28FF08
28FF08 123
p a
Pointer
Pointer is a variable whose value is the address of another variable
&a means---address of the variable a
Address operator: &
Address operator operates on variable, array element
&a (int a;)
&a[5] (int a[10];)
&a (int a[10];)
&123
&(a+b)
Pointer Declaration
data_type *pointer_name;
data_type* pointer_name;
char *a; //pointer to a character
int *a; // pointer to an integer [a will point to an integer type variable’s memory address]
float *a; // pointer to a float
double *a; // pointer to a double
int * a;
Difference between
int a;
int *a; //Assume it is a→
Assigning Value to Pointer
It is necessary to explicitly mention whom a pointier variable is pointing
pointer_name=&variable_name;
p=&a;
28FF08
28FF08 123
p a
Assigning Value to Pointer
Whose address is pointed by a pointer should be declared before the pointer
Assigning Value to Pointer
Data types should not conflict
Using the Data of the Pointed Variable
28FF04 28FF00
28FF04 11 33
p a b
28FF04 28FF00
28FF04 11 11
p a b
28FF04 28FF00
28FF04 22 11
p a b
De-referencing a pointer
Pointer Arithmetic
x=(p1)*(p2);
Pointer and Arrays
Name of an array is the address of its first element (base address)
a[0] a[1] a[2] a[3] a[4]
11 22 33 44 55
28FEE4 28FEE8 28FEEC 28FEF0 28FEF4
p=&a; p
28FEE4
p
28FEE8
p
28FEF4
Pointer and Arrays
a[i]; //a[2],a[3]
*(a+i); //*(a+2),*(a+3)
p
28FEE8
a[0] a[1] a[2] a[0] a[1] a[2] a[0] a[1] a[2] a[0] a[1] a[2]
11 22 33 11 23 33 11 23 33 11 23 34
28FEE8 28FEEC 28FEF0 28FEE8 28FEEC 28FEF0 28FEE8 28FEEC 28FEF0 28FEE8 28FEEC 28FEF0
p p p p
28FEEC 28FEEC 28FEF0 28FEF0
Pointer and Arrays
p[4]=&y; → → → → 31F0AB y
Pointer Casting
(data_type*) pointer_name;
void Pointers
No associated data type
Can hold address of any type
void *pointer_name;
Casting is required for using a void pointer as the operand of any operator
Generic pointer
NULL Pointers
A pointer is usually assigned the address of another variable
Besides, it can be assigned a NULL value
A pointer who is assigned a NULL value is known as a NULL pointer
data_type *pointer_name=NULL;
int *p=NULL;
char *p=NULL;
const Pointers
const data_type *pointer_name=value;
data_type* const pointer_name=value;
Pointer of Pointer
28FF04 28FF08
p2 p1 a
Pointers and Functions
Pointer as the parameter of a function
Pointers and Functions
Pointer as the parameter of a function
Pointers and Functions
Pointer as the parameter of a function
Pointers and Functions
Pointer as the return value of a function
data_type *function_name(parameter_list/argument_list)
{
:
return address;
}
char *func(){}
int *func(){}
float *func(){}
double *func(){}
Pointers and Functions
Function pointer