Data Variable and Pointer Variable Pass by Reference Pointer Arithmetic Passing Array Using Pointers Dynamic Allocation.

Презентация:



Advertisements
Похожие презентации
Unit II Constructor Cont… Destructor Default constructor.
Advertisements

Data Types in C. A Data Type A data type is –A set of values AND –A set of operations on those values A data type is used to –Identify the type of a variable.
Operator Overloading Customised behaviour of operators Chapter: 08 Lecture: 26 & 27 Date:
Pointers Part I (Fundamentals) Computer Programming I Lecture 12 Copyright (C) 2004 by Wong Ya Ping updated : ver080415(KCLee)
A Short Review Arrays, Pointers and Structures. What is an Array? An array is a collection of variables of the same type and placed in memory contiguously.
1/27 Chapter 9: Template Functions And Template Classes.
1/30 Chapter 8: Dynamic Binding And Abstract classes.
Inner Classes. 2 Simple Uses of Inner Classes Inner classes are classes defined within other classes The class that includes the inner class is called.
Sequences Sequences are patterns. Each pattern or number in a sequence is called a term. The number at the start is called the first term. The term-to-term.
Loader Design Options Linkage Editors Dynamic Linking Bootstrap Loaders.
© 2009 Avaya Inc. All rights reserved.1 Chapter Two, Voic Pro Components Module Two – Actions, Variables & Conditions.
A class is just a collection of variables--often of different types--combined with a set of related functions. The variables in the class are referred.
HPC Pipelining Parallelism is achieved by starting to execute one instruction before the previous one is finished. The simplest kind overlaps the execution.
Arrays Dr. Ramzi Saifan Slides adapted from Prof. Steven Roehrig.
Operators and Arithmetic Operations. Operators An operator is a symbol that instructs the code to perform some operations or actions on one or more operands.
Basic Input - Output. Output functions printf() – is a library function that displays information on-screen. The statement can display a simple text message.
Pointers Part II (Dynamic Memory Allocation) Allocation) Lecture 13 Copyright (C) 2004 by Wong Ya Ping updated : ver080916(KCLee) Computer Programming.
1 Arrays and Strings Lecture: Design Problem l Consider a program to calculate class average Why?? ?
Multiples Michael Marchenko. Definition In mathematics, a multiple is the product of any quantity and an integer. in other words, for the quantities a.
How can we measure distances in open space. Distances in open space.
Транксрипт:

Data Variable and Pointer Variable Pass by Reference Pointer Arithmetic Passing Array Using Pointers Dynamic Allocation

Address VS. Value Each memory cell could store some VALUE. Each cell has an ADDRESS associated with it. Note: Dont confuse the address referring to a memory location with the value stored in that location.

Pointer Just another C variable whose value is an address of another variable. Points to that other variable.

Declaring a pointer Syntax: * ; Examples: int *ptr; char *cp; float *fp; Note: is the type of the data the pointer points to.

Declaring a pointer After declaring a pointer: int *ptr; ptr doesnt actually point to anything yet. (null pointer) We can either: make it point to something that already exists allocate room in memory for something new that it will point to

Declaring a pointer Declaring a pointer just allocates space to hold the pointer; it does not allocate something to be pointed to. If local variables in C are not initialized, they may contain anything.

Operators Associated with Pointers Reference operator (&) Also known as the address operator Read as address of Dereference operator (*) Read as value pointed by

Reference Operator (&) The address that locates a variable within memory is what we call a reference to that variable. Example: int andy; int *ted; ted = &andy;

Reference Operator (&) Example: andy = 25; fred = andy; ted = &andy;

Dereference Operator (*) Using a pointer we can directly access the value stored in the variable which it points to. Example: beth = *ted; /* beth is equal to value pointed by ted */

Dereference Operator (*) Differentiate: beth = ted; /* beth equal to ted ( 1776 ) */ beth = *ted; /* beth equal to value pointed by ted ( 25 ) */ Note: Reference and dereference operators have complementary (or opposite) meanings. A variable referenced with & can be dereferenced with *.

Pointers Examples: andy = 25; ted = &andy; After these expressions: andy = 25 &andy = 1776 ted = 1776 *ted = 25

Pointers 13 Data Variable int x=5; x=5 &x addressdata Pointer Variable int x=5; int *p; p=&x; printf(%p, p); printf(%d, *p); the data inside address p x=5 &x=FF00 p=address (FF00)

14 Sample Program : Pointers 1/* Filename: Pointers.c Program Description: Pointer example */ Predict the output: #include main() { int count, value; int *count_address; count = 100; count_address=&count; value= *count_address; printf(\n %p, count_address); printf(\n %d, value); getch(); } Pointers

Review: Parameter Passing Two Ways: Pass by Value Pass by Reference

Review: Pass by Value int cubeByValue( int ); main() {int n = 5; printf(Original value: %d, n); n = cubeByValue( n ); printf(\nNew value: %d, n); getch(); ) int cubeByValue( int n ) { return n * n * n; }

Example 1: Pass by Reference int cubeByReference( int * ); main() {int n = 5; printf(Original value: %d, n); n = cubeByReference( &n ); printf(\nNew value: %d, n); getch(); ) int cubeByReference( int *nPtr ) { *nPtr = *nPtr * *nPtr * *nPtr; return *nPtr; }

Example 2: Pass by Reference void cubeByReference( int * ); main() {int n = 5; printf(Original value: %d, n); cubeByReference( &n ); printf(\nNew value: %d, n); getch(); } void cubeByReference( int *nPtr ) { *nPtr = *nPtr * *nPtr * *nPtr; }

Exercise: Create a function that would swap two numbers. The numbers must be pass as parameters of that function: Using pass by value Using pass by reference

Pointer Arithmetic Pointers only have limited set of operations: A pointer could be incremented (++) and decremented (--) An integer may be added (+, +=) to a pointer An integer may be subtracted (-, -=) from a pointer One pointer may be subtracted from another

Pointer Arithmetic int v[5]; vPtr can be initialized by: vPtr = v; vPtr = &v[0]; The diagram considers a machine (computer) with 4-byte integers vPtr v[0] v[1] v[2] v[3] v[4]

Pointer Arithmetic Example: vPtr += 2; Result: * 4 = vPtr v[0] v[1] v[2] v[3] v[4] vPtr

Pointer Arithmetic For arrays of other data types, vPtr would be incremented by twice the number of bytes that it takes to store an object of that data type. Example: char v[5]; vPtr += 2; Result: * 1 = vPtr v[0] v[1] v[2] v[3] v[4] vPtr

Pointer Arithmetic Same case of a 2-byte integer machine. Example: int v[5]; vPtr += 2; Result: * 2 = 3004 Most computers have 2-byte or 4-byte integers. Some newer ones uses 8-byte machines. Because of this, pointer arithmetic is machine- dependent vPtr v[0] v[1] v[2] v[3] v[4] vPtr

Pointer Arithmetic If these are conducted in sequence: vPtr is incremented to 3016:vPtr += 4; vPtr is set back to address 3000:vPtr -= 4; To increment vPtr:++vPtr; or vPtr++; To decrement vPtr:--vPtr; or vPtr--; 3000 vPtr v[0] v[1] v[2] v[3] v[4]

Pointer Arithmetic What would be the value of x? x = v2Ptr – vPtr; Pointer arithmetic is meaningless unless performed on an array vPtr v[0] v[1] v[2] v[3] v[4] v2Ptr

Pointer Arithmetic Pointers can be compared using equality and relational operators, but is meaningless unless pointers point to members of the same array. Pointer comparisons compare the addresses stored in the pointers.

Generic Pointers A pointer can be assigned to another pointer if both pointers are of the same type. *a = *b; Otherwise, a cast operator must be used to convert the pointer. *a = * (int *) b;

Generic Pointers Exception: pointer to void (i.e. void *) Generic pointers can represent any pointer type. A cast operation is not required but we can cast any data variable as a pointer to void. A pointer to void cannot be dereferenced.

Example: Generic Pointers main() { int i; char c; void *v; clrscr(); i = 6; c = 'a'; v = &i; printf(v points to %d\n", *(int *) v); v= &c; printf(v now points to %c\n", *(char *) v); getch(); }

Pointer Arithmetic VALID: Add an integer to a pointer. Subtract an integer from a pointer. Subtract 2 pointers (from the same array). Compare pointers (, >=). Compare pointer to NULL (indicates that pointer points to nothing). INVALID: Adding 2 pointers. Multiplying pointers. Dividing pointers. Subtracting a pointer from integer. Add or subtract type float or double to or from pointers.

Pointer Arithmetic Predict the output: int x[5] = { 1, 2, 3, 4, 5 }; printf(\n %d, *p1 ); int *p1; x[2] = *p1 + p1[2]; p1 = x; printf(\n %d, x[2] ); p1++;

Arrays and Pointers Arrays and pointers are closely related An array name is a constant pointer The name of the arrays points to the address/location of the first element of the array. Constant pointer means that its value (address/reference) could not be changed.

Using ARRAY INDEXING: Arrays and Pointers v v[0] v[1] v[2] v[3] v[4] int v[5];

Using POINTER MANIPULATION: Pointers can also be subscripted (indexed) exactly like arrays can. This is referred to as pointer/subscript notation. Arrays and Pointers int v[5]; int *p = v; p[0] p[1] p[2] p[3] p[4] p

Using POINTER MANIPULATION: Using pointer arithmetic, the array could be traversed. Arrays and Pointers int v[5]; int *p = v; p++; p += 3; *p--; p[0] p[1] p[2] p[3] p[4] p

Passing Arrays using Pointers Sample Program : Passing Array Using Pointer 1/* Filename: ArrayPtr.c Program Description: Display the string character by character */ Predict the output: #include void Display(char *p); main() { char str[6] = hello; Display( str ); getch(); } void Display( char *p ) { while( *p ) { putchar( *p ); p++; }

Double Pointers A pointer whose value is the address of another pointer. Also called as a Pointers to pointers (i.e. pointers to int, pointers to char, etc.) Syntax: int **ptr; char **a;

Double Pointers Example: int **ipp; int i = 5, j = 6; k = 7; int *ip1 = &i, *ip2 = &j; ipp = &ip1; 756 i j k 3000 … 4FF1 … … 581C 123D ipp 3000 ip1 123D 4FF1 ip2 54EA POINTER VALUES: *ipp = 3000 **ipp = 5

Double Pointers Example: *ipp = ip2; POINTER VALUES: *ipp = 4FF1 **ipp = i j k 3000 … 4FF1 … … 581C 123D ipp 4FF1 ip1 123D 4FF1 ip2 54EA

Double Pointers Example: *ipp = &k; POINTER VALUES: *ipp = 581C **ipp = i j k 3000 … 4FF1 … … 581C 123D ipp 581C ip1 123D 4FF1 ip2 54EA

Dynamic Memory Allocation Allows to programmers to allocate (reserve) memory dynamically. Obtain more memory space at execution time. Common Library functions associated: malloc() free() sizeof()

Dynamic Memory Allocation Sample Program : Dynamic Allocation /* Filename: Dynamic.c Program Description: Using malloc */ Output: #include main() { int *p1,x; int *p[4]; p1=(int *) malloc(sizeof(int)); *p1= 5; printf(\n%d, *p1); p[0] = (int *) malloc( sizeof( int )); p[1] = (int *) malloc( sizeof ( int)); p[2] = (int *) malloc( sizeof( int )); p[3] = (int *) malloc( sizeof( int )); *p[0] = 10; *p[1] = 20; *p[2] = 30; *p[3] = 40; for(x=0; x<4; x++) printf(\n%d, *p[0] ); for(x=0; x<4; x++) free( p[x] ); getch(); }

Pointers EXERCISE (By pairs): 1. Make a function that accepts a pointer to a string and determine how many letter As are there in the string. 2. Make a function that accepts an array of n integers and returns the average of these integers. Implement using pointers.

NOTES 45 (PCBLab Forum > ComE Subjects > ComE 211)