0% found this document useful (0 votes)
49 views

C Pointers: Systems Programming

This document discusses pointers in C programming. It begins by explaining that variables correspond to memory locations and contain an address. It then defines pointers as variables that contain the address of another variable. The document provides examples of declaring pointer variables, assigning the addresses of other variables to pointers, and using pointers to access and update the values of other variables. It also demonstrates how pointers can be used in call by reference and to swap variable values. The document shows how to use pointers with arrays and discusses operator precedence issues that can arise with pointers.

Uploaded by

Anil Sharma
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
49 views

C Pointers: Systems Programming

This document discusses pointers in C programming. It begins by explaining that variables correspond to memory locations and contain an address. It then defines pointers as variables that contain the address of another variable. The document provides examples of declaring pointer variables, assigning the addresses of other variables to pointers, and using pointers to access and update the values of other variables. It also demonstrates how pointers can be used in call by reference and to swap variable values. The document shows how to use pointers with arrays and discusses operator precedence issues that can arise with pointers.

Uploaded by

Anil Sharma
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 20

C Pointers

Systems Programming
Pointers

 Pointers and Addresses


 Pointers

 Using Pointers in Call by

Reference
 Swap – A Pointer Example

 Pointers and Arrays

 Operator Precedence Example

Systems Programming: Pointers 2


Variables

 Variable names correspond to memory


locations in memory. Every variable
has a type, a name and a value.
int i; i
i = 4;
32212242 4

(the address of i ) &i

Systems Programming: Pointers 3


Print an Address
int main ()
{
int i;
i = 4;
printf(‘i = %d, address of i = %u\n”, i, &i);
return 0;
}

$./ptr1
i = 4, address of i = 3220392980

Systems Programming: Pointers 4


Pointers
 What is a pointer?
– a variable that contains a memory
address as its value.
– Pointers contain the address of a
variable that has a specific value (an
indirect reference).
 Pointers in C are typed.
– a pointer to a variable of type int
– a pointer to a variable of type char
– a pointer to a defined type or an object.
 2007 Pearson Ed -All rights reserved.

Systems Programming: Pointers 5


Fig. 7.1 Directly and indirectly
referencing a variable

 2007 Pearson Ed -All rights reserved.

Systems Programming: Pointers 6


Pointers
/* Welcome to the world of Pointers!
Pointers are a powerful tool */
int main ()
{
int i;
int *ptr; /* pointer declaration */

i = 4;
ptr = &i;
printf(" i = %d\n address of i = %u\n address of pointer = %u\n",
i, ptr, &ptr);
return 0; ./ptr2
} i=4
address of i = 3219352564
address of pointer = 3219352560
Systems Programming: Pointers 7
Pointers
/* Do you think in Hex ?*/ ptr
int main ()
{ bfe07240 bfe07244
int i; bfe07244 4
int *ptr;

i = 4; i
ptr = &i;
printf(" i = %d\n address of i = %p\n address of pointer = %p\n",
i, ptr, &ptr);
return 0;
./ptr3
}
i=4
address of i = 0xbfe07244
address of pointer = 0xbfe07240
Systems Programming: Pointers 8
Pointers
/* Never trust a Compiler. */
int j, i; /* think globally! */
int *ptr1, *ptr2; ptr1 8049654
void printit ()
{
ptr2 804964c
printf(" i = %2d, ptr1 = %p\n", i, ptr1);
printf(" j = %2d, ptr2 = %p\n", j, ptr2);
}
int main () j 19
8
9
{
i = 4; j = 8; i 4
6
ptr1 = &i;
ptr2 = &j;
printit (); ./ptr4
*ptr2 = *ptr2 + 1;
ptr1 = ptr1 - 2; /* You cannot know i =this4,*/ptr1 = 0x8049654
printit (); j = 8, ptr2 = 0x804964c
i = 6;
*ptr1 = *ptr1 + 10; i = 4, ptr1 = 0x804964c
printit (); j = 9, ptr2 = 0x804964c
return 0;
} i = 6, ptr1 = 0x804964c
j = 19,Pointers
Systems Programming: ptr2 = 0x804964c 9
7.4 Calling Functions by Reference
 Call by reference with pointer arguments
– Pass address of argument using & operator
– Allows you to change the actual location in memory
– Arrays are not passed with & because the array
name is already a pointer.
 * operator
– Used as alias/nickname for variable inside of function
void double( int *number )
{
*number = 2 * ( *number );
}
– *number used as nickname for the variable passed.

 2007 Pearson Ed -All rights reserved.

Systems Programming: Pointers 10


Using Pointers in Call by Reference
1 /* Fig. 7.7: fig07_07.c
2 Cube a variable using call-by-reference with a pointer argument */
 2007 Pearson Ed -All rights reserved.
3
4 #include <stdio.h>
5
6 void cubeByReference( int *nPtr ); /* prototype */
7
8 int main( void )
Function prototype takes a pointer argument
9 {
10 int number = 5; /* initialize number */
11
12 printf( "The original value of number is %d", number );
13
Function cubeByReference is
14 /* pass address of number to cubeByReference */
15 cubeByReference( &number ); passed an address, which can be the
16 value of a pointer variable
17 printf( "\nThe new value of number is %d\n", number );
18
19 return 0; /* indicates successful termination */
20
21 } /* end main */
22
23 /* calculate cube of *nPtr; modifies variable number in main */
24 void cubeByReference( int *nPtr )
25 { In this program, *nPtr is number, so this
26 *nPtr = *nPtr * *nPtr * *nPtr; /* cube *nPtr */ statement modifies the value of number
27 } /* end function cubeByReference */
itself.
The original value of number is 5
The new value of number is 125
Systems Programming: Pointers 11
Swap: A Pointer Example
/* A simple memory swap using pointers */

void swap (int *i, int *j)


{
int temp;

temp = *i;
*i = *j;
*j = temp;
}

Systems Programming: Pointers 12


Swap: A Pointer Example
int main ( ) ./swap
{ mem1: 81 mem2: 12
int i; ray1[0] = 0 ray1[1] = 10 ray1[2] = 20 ray1[3] = 30
int mem1, mem2, ray1[4];

mem1 = 12;
mem2 = 81;
swap (&mem1, &mem2); /* swap two integers */
printf("mem1:%4d mem2:%4d\n", mem1, mem2);

for (i = 0; i < 4; i++)


{
ray1[i] = 10*i;
printf("ray1[%d] =%4d ", i, ray1[i]);
}
printf("\n");

Systems Programming: Pointers 13


Swap: A Pointer Example

swap (&mem1, &ray1[3]);


swap (&mem2, &ray1[2]);
printf("mem1:%4d mem2:%4d\n", mem1, mem2);

for (i = 0; i < 4; i++)


printf("ray1[%d] =%4d ", i, ray1[i]);

printf("\n");
return 0;
}
mem1: 30 mem2: 20
ray1[0] = 0 ray1[1] = 10 ray1[2] = 12 ray1[3] = 81

Systems Programming: Pointers 14


Pointers and Arrays

r 1 1 1 0 0 0

r[0] r[1] r[2] r[5]


int main ()
ptr {
int i, r[6] ={1,1,1};
int *ptr;
ptr = r;
*ptr = 83;
*(ptr +2) = 33;
for (i=0; i < 6; i++)
printf (" r[%d] = %d\n", i, r[i]);
Systems Programming: Pointers 15
Pointers and Arrays

r 83 1 33 0 0 0

r[0] r[1] r[2] r[5]


ptr r[4] = *ptr;
ptr++;
*ptr = 6;
*(ptr +2) = 7;
for (i=0; i < 6; i++)
printf (" r[%d] = %d\n", i, r[i]);
return 0;
}

Systems Programming: Pointers 16


Pointers and Arrays

r 83 6 33 7 83 0

r[0] r[1] r[2] r[5]


ptr r[4] = *ptr;
ptr++;
*ptr = 6;
*(ptr +2) = 7;
for (i=0; i < 6; i++)
printf (" r[%d] = %d\n", i, r[i]);
return 0;
}

Systems Programming: Pointers 17


Operator Precedence Example
/* An example of operator precedence trouble */
int main ()
{
$ ./prec
float x,y,z;
float *ptr1, *ptr2, *ptr3; 3220728372 3220728368 3220728364
2.000000 8.000000 4.000000
x =2.0; y = 8.0; z = 4.0; 3220728372 3220728368 3220728368
2.000000 8.000000 8.000000
ptr1 = &x;
ptr2 = &y;
ptr3 = &z;
printf (" %u %u %u\n", ptr1, ptr2, ptr3);

*ptr3++;
printf (" %f %f %f\n", x, y, z);
printf (" %u %u %u\n", ptr1, ptr2, ptr3);
printf (" %f %f %f\n", *ptr1, *ptr2, *ptr3);

Systems Programming: Pointers 18


Precedence Example

(*ptr1)++;
printf (" %f %f %f\n", *ptr1, *ptr2, *ptr3);

--*ptr2;
printf (" %f %f %f\n", *ptr1, *ptr2, *ptr3);
return 0;
}

3.000000 8.000000 8.000000


3.000000 7.000000 7.000000

Systems Programming: Pointers 19


Summary
 This section demonstrated the
relationship between pointers and
addresses and introduced the
respective operators & and * .
 Showed the use of pointers in simple
examples.
 Introduced call by reference with
pointers.
 Detailed the relationship between
pointers and arrays.
Systems Programming: Pointers 20

You might also like