0% found this document useful (0 votes)
22 views14 pages

More On Pointers

This document discusses pointers and arrays in C programming. It covers how pointers and arrays are related, how arrays can be passed to functions by passing a pointer to the array, and how multidimensional arrays are stored in memory in row-major format. It also discusses pointers to pointers, dynamic memory allocation using malloc() and free(), and pointers to functions which allow functions to be called indirectly through a function pointer.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
22 views14 pages

More On Pointers

This document discusses pointers and arrays in C programming. It covers how pointers and arrays are related, how arrays can be passed to functions by passing a pointer to the array, and how multidimensional arrays are stored in memory in row-major format. It also discusses pointers to pointers, dynamic memory allocation using malloc() and free(), and pointers to functions which allow functions to be called indirectly through a function pointer.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 14

6.

More on Pointers

14th September
IIT Kanpur

C Course, Programming club, Fall 2008 1


Pointers and arrays
• Pointers and arrays are tightly coupled.
char a[] = “Hello World”;
char *p = &a[0];

C Course, Programming club, Fall 2008 2


Pointers and arrays contd..
• Name of the array is synonymous with the
address of the first element of the array.

int *p;
int sample[10];
p = sample; // same as p = &sample[0];

int *p;
int sample[10];
p = sample;
p[5] = 100; // Both these statements
*(p+5) = 100; // do the same thing

C Course, Programming club, Fall 2008 3


Pointers and function arguments
• Functions only receive copies of the variables passed
to them.
{program: swap_attempt_1.c}
• A function needs to know the address of a variable if it
is to affect the original variable
{program: swap_attempt_2.c}
• Large items like strings or arrays cannot be passed to
functions either.
printf(“hello world\n”);

• What is passed is the address of “hello world\n” in the


memory.

C Course, Programming club, Fall 2008 4


Passing single dimension arrays to
functions
• In C, you cannot pass the entire data of the array as an
argument to a function. int main() {
– How to pass array then? int sample[10];
func1(sample);
• Pass a pointer to the array. …
}
void func1(int *x) {

}
void func1(int x[10]) {

}
void func1(int x[]) {

}

C Course, Programming club, Fall 2008 5


2-Dimensional Arrays (Array of arrays)
int d[3][2];

Access the point 1, 2 of the array:


d[1][2]

Initialize (without loops):


int d[3][2] = {{1, 2}, {4, 5}, {7, 8}};

C Course, Programming club, Fall 2008 6


More about 2-Dimensional arrays
A Multidimensional array is stored in a row major format.
A two dimensional case:
 next memory element to d[0][3] is d[1][0]

d[0][0] d[0][1] d[0][2] d[0][3]


d[1][0] d[1][1] d[1][2] d[1][3]
d[2][0] d[2][1] d[2][2] d[2][3]

What about memory addresses sequence of a three


dimensional array?
 next memory element to t[0][0][0] is t[0][0][1]
C Course, Programming club, Fall 2008 7
Multidimensional Arrays
• Syntax
type array_name[size1][size2]…[sizeN];

e.g
int a[3][6][4][8];

size of array = 3 x 6 x 4 x 8 x 4 bytes

C Course, Programming club, Fall 2008 8


Arrays of Pointers
int *x[10];

Declares an array of int pointers. Array has 10


pointers.

Assign address to a pointer in array


x[2] = &var;

To find the value of var,


int i =*x[2];

C Course, Programming club, Fall 2008 9


Pointer to Pointer
• Declaration
– Place an additional asterisk
double **newbalance;

newbalance is a pointer to a double pointer.

C Course, Programming club, Fall 2008 10


Pointer to Pointer contd..
#include <stdio.h>

int main() {
int x, *p, **q;
x = 10;
p = &x;
q = &p;

printf(“%d %d %d\n”, x, *p, **q);


return 0;
}

{program: pointers.c}
C Course, Programming club, Fall 2008 11
Dynamic Memory Allocation
• To allocate memory at run time.
• malloc(), calloc()
– both return a void*
• you’ll need to typecast each time.
char *p;
p = (char *)malloc(1000); /*get 1000 byte space */

int *i;
i = (int *)malloc(1000*sizeof(int));

C Course, Programming club, Fall 2008 12


Dynamic Memory Allocation contd..
• To free memory
• free()
– free(ptr) frees the space allocated to the pointer
ptr

int *i;
i = (int *)malloc(1000*sizeof(int));
.
.
.
free(i);

C Course, Programming club, Fall 2008 13


Pointers to functions
• A function pointer stores the address of the
function.
• Function pointers allow:
– call the function using a pointer
– functions to be passed as arguments to other
functions
return_type (*function_name)(type arg1, type
arg2…)
{program: function_pointer.c}
C Course, Programming club, Fall 2008 14

You might also like