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

CPP 3

This document summarizes a lecture on arrays, pointers, and strings in C++. It covers array declaration and initialization, passing arrays to functions, pointers and how they relate to arrays, string processing functions, and more. Key topics include using arrays to store multiple values of the same type, pointers storing memory addresses, and strings as arrays of characters including null termination.

Uploaded by

Khemnath Chauhan
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
41 views

CPP 3

This document summarizes a lecture on arrays, pointers, and strings in C++. It covers array declaration and initialization, passing arrays to functions, pointers and how they relate to arrays, string processing functions, and more. Key topics include using arrays to store multiple values of the same type, pointers storing memory addresses, and strings as arrays of characters including null termination.

Uploaded by

Khemnath Chauhan
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 30

C++

Lecture 3 Monday, 14 July 2003

Arrays, Pointers, and Strings

Use of array in C++, multidimensional array, array argument passing Pointers Relation between pointer and array String, string processing functions

Arrays

Declaration of an array int c[12]; or const int max = 12; int c[max]; References to an array c[ ] c[0], c[1], , c[max-1]

Array Initialization
int n[5] = {1, 2, 3, 4, 5}; or int n[ ] = {1, ,2, 3, 4, 5}; n[0], n[1], , n[4] are valid references
C.f. Fig. 4.3

Array of Characters (String)


char string1[20]; char string2[ ] = "string literal"; Individual array element is a character string2[3] = 'y';

C.f. Fig. 4.12

Passing Array
Passing an array name is equivalent to passing the address of the array int a[5]; // declare array func(a); // use function void func(int a[ ]) // define function { C.f Fig. 4.14 }

Array Name is a constant Address


int a[100]; a is the address of a[0], a+k is the address of a[k]. a1, or a+100, is also a valid address; C/C++ cannot check array index out of bound error during compile or run time.

Multiple-Subscripted Arrays
int a[2][5]; A 2 by 5 array. Initialization int a[2][5] = { {0,1,2,3,4}, {0,2,4,6,8} }; Row major convention in C/C++

Argument Passing for Multi-Dimensional Array


int a[3][5]; func(a); or func(a+1);

void func(int b[ ][5]) { ...

C.f Fig. 4.22

Pointers

Pointer value holds the address of a variable. Pointers are also typed, i.e, pointer to int is considered different from pointer to double. E.g., int *p; double *fpt;

Declaration of Pointer Variables


int *p; // a pointer to int int c; // an int variable p = &c; // address of c is given to p The value of variable p is the address of c. The value at the address stored in p is the value of c. *p = 2; // dereferencing

Address Operator &


int c, *p, a[100];

p = &c; p = a; p = &a[0];

// address of c // address of array // same as above

Dereferencing Operator *
int *p, c;

c = 1; p = &c; j = *p;

// let p point to c

// j gets 1,

Operator Precedence and Associativity


() [] left to right ++, --, &, * right to left */ % left to right +,left to right <<, >> left to right <, <=, >, >= left to right ==, != left to right , left to right highest unary multiply additive insertion relational equality comma

Left to Right Association

a + b + c means (a+b) + c

Precedence
a + b*c means a + (b*c)

Adding Parentheses ( ) to show the order of evaluation

b += x = y - k*a[ j ] && 3 | u < v--;

See Appendix A, page 1214 for the complete "Operator Precedence Chart".

Answer
b += (x = ((y - (k*(a[ j ]))) && (3 | (u < (v--)))));

Call-by-Reference with Pointer


Passing a pointer can modify the value in calling program. int c; cube_it(&c);

void cube_it(int *p) { ...

C.f. Fig.5.7

Pointer to const data and const Pointers


void f(const int *p); The data pointed by p cannot be modified. int * const p = &x; // p always // pointing to x const int *const p = &x; // p always // points to x, x cannot change

Relationship between Pointers and Arrays

An expression of *(a + k) is considered totally equivalent to a[k].

E.g., a[0] is the same as *a.

Multi-Dimensional Array

In the declaration int a[3][7]; we can view a as pointer to array of a[0], a[1], a[2], which themselves are pointers to int array a[i][j]. **a is the same as a[0][0].

Pointer of Pointers
a a[0] a[1] a[2][0] a[2][1] a[2]

a[1][0]
a[0][0]

a[1][1] ...

a[0][1] a[0][2] ...

Arrays of Pointers
char *suit[4] = { "Hearts", "Diamonds", "Clubs", "Spade"};

suit[0][0] refers to 'H', suit[3][4] refers to 'e' in "Spade", suit[2][20] is an illegal access.

Function Pointer
void (*f)(int); f is a pointer to a function of the form void g(int). Function names are like address, e.g, f = g; (*f)(5); // call the function

Fundamentals of Characters and Strings


char c, s[10]; // declare variables c = 'a'; // can be used as small int s = "John Q"; // don't work, why? You must do s[0] = 'J'; s[1] = 'o'; s[2] = 'h'; // etc Or use string copy function

String Initialization
char color[ ] = "blue"; char *colorPtr = "blue"; char color[ ] = {'b', 'l', 'u', 'e', '\0'};

What is the difference between the array color and the pointer colorPtr?

Read a String
char word[20]; cin >> word; // cause problem cin >> setw(20) >> word; // OK Read an entire line char sentence[80]; cin.getline(sentence, 80);

String Processing Functions <string.h>


char *strcpy(char *t, const char *s); char *strncpy(char *t, const char *s, size_t n); char *strcat(char *t, const char *s); int strcmp(const char *s, const char *t); size_t strlen(const char *s);

String Processing

Examples from Fig.5.30 and 5.31.


C.f. Fig 5.30 and 5.31

Exercise 4.29

(The Sieve of Eratosthenes) A prime integer is any integer that is evenly divisible only by itself and 1. Use the sieve method to find prime.
Initialize a[1000] all to 1 (for true). Starting from 2, 3, , k, ..., set array indices which are all multiple of k to 0, print the nonzero indices.

You might also like