# C programming---Pointers - PowerPoint PPT Presentation

1 / 24

C programming---Pointers. The first step: visualizing what pointers represent at the machine level. In most modern computers, main memory is divided into bytes. Each byte can hold 8 bits of information:. Each byte has a unique address in memory. Address. Address. Contents. 0. 1. 2. 3.

I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.

C programming---Pointers

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

### C programming---Pointers

The first step: visualizing what pointers represent at the machine level. In most modern computers, main memory is divided into bytes.

Each byte can hold 8 bits of information:

Each byte has a unique address in memory.

Contents

0

1

2

3

n-1

int i = 9;/* suppose sizeof(int) = 4

The address of variable i is 0xFA83

0xFA83

0xFA84

0xFA85

0xFA86

### Pointer Variables

Use a pointer variable p to store the address of a

variable i, and we say p “points to” i

0xFA83

0xFA84

0xFA85

0xFA86

p

### Declaring Pointer Variables

int *p; // p is a pointer variable capable of pointing to objects of type int

char *str;

double *q;

C requires that every pointer variable point to objects of a particular type(the referenced type)

There are no restrictions on what referenced

type may be. In fact, a pointer variable can even point to another pointer.

### The Address and Indirection Operators

• int i, *p;

• …….

• p = &i;

• int i;

• int *p = &i;

• int i, p = &i;

### The Address and Indirection Operators

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

j = *&i;

### The Address and Indirection Operators

int i, *p = &i;

i = 1;

printf(“i = %d\n”, i);

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

*p = 4;

printf(“i = %d\n”, i);

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

### Something to remember

Never apply the indirection operator to an

uninitialized pointer variable.

int *p;

printf(“%d”, *p);

Unless you know where a pointer points to, do

not make an assignment to the pointer

### Pointer Assignment

int i, j, *p, *q;

p = *i;

q = p;

p

i

q

### Pointer Assignment

int i, j, *p, *q;

p = &i;

q = &j;

*q = *p;

p

i

q

Example 2.c

### Using const to Protect Arguments

When we call a function and pass it a pointer to a variable, we normally assume that the function will modify the variable.

Sometimes we just want to examine the value of a variable, not change it.

Using pointer might be efficient: time and memory space

void f(const int *p)

{

*p = 0; // wrong: p is a pointer to a “constant integer”

}

### Pointers as Return Values

int *max(int *a, int *b)

{

if(*a > *b)

return a;

else

return b;

}

int *p = max(&a, &b);

int *f(void)

{

int a;

……

return &a;

}

### Pointers and Arrays

Pointer Arithmetic

int a[10], *p;

p = &a[0];

a

p

p

q

p = &a[2];

q = p + 3;

p += 4;

### Comparing Pointers

Using the relational operators( <, <=, >, >=) and the equality operator

(== and !=)

int *p = &a[5];

int *q = &a[1];

The value of p <= q is 0(false)

The value of p >= q is 1(true)

### Using Pointers for Array Processing

#define N 10

int a[N], sum, *p;

sum = 0;

for(p = &a[0]; p < &a[N]; p++)

sum += *p;

### Combining the * and ++ Operators

*p++ or *(p++)

(*p)++

*++p or *(++p)

++*p or ++(*p)

The postfix version of ++ takes precedence over *

See 3.c

### Using an Array Name as a Pointer

int a[10];

*a = 7; // modify a[0]

*(a + 2) = 13; // modify a[2]

while( *a != 0 )

a++; // wrong

### Array Arguments

int find_largest(int a[], int n)

{

}

int find_largest(int *a, int n)

{

}

### Using a Pointer as an Array Name

#define N 10

…..

int a[N], i, sum = 0, *p = a;

…..

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

sum += p[i];

### Pointers and Multidimensional Arrays

int a[NUM_ROWS][NUM_COLS];

int row, col;

for(row = 0; row < NUM_ROWS; row++)

for(row = 0; row < NUM_ROWS; row++)

a[row][col] = 0;

int *p;

for(p = &a[0][0]; p <= &a[NUM_ROWS-1][NUM_COLS]; p++)

*p = 0;