Pointers and References

Slides:



Advertisements
Similar presentations
This Time Pointers (declaration and operations) Passing Pointers to Functions Const Pointers Bubble Sort Using Pass-by-Reference Pointer Arithmetic Arrays.
Advertisements

Kernighan/Ritchie: Kelley/Pohl:
1 Pointers A pointer variable holds an address We may add or subtract an integer to get a different address. Adding an integer k to a pointer p with base.
ECE 353: Lab C Pointers and Structs. Basics A pointer holds an address to some variable Notation: – Dereferencing operator: * int *x is a declaration.
6/10/2015C++ for Java Programmers1 Pointers and References Timothy Budd.
ARRAYS AND POINTERS Although pointer types are not integer types, some integer arithmetic operators can be applied to pointers. The affect of this arithmetic.
1 Chapter 9 Pointers. 2 Topics 8.1 Getting the Address of a Variable 8.2 Pointer Variables 8.3 Relationship Between Arrays and Pointers 8.4 Pointer Arithmetic.
Ch 7. Operator Overloading Timothy Budd. Ch 7. Operator Overloading2 Introduction Almost all operators in C++ can be overloaded with new meanings. Operators.
Chapter 13: Pointers, Classes, Virtual Functions, and Abstract Classes
 2006 Pearson Education, Inc. All rights reserved Classes: A Deeper Look.
Pointer Data Type and Pointer Variables. Objectives: Pointer Data Type and Pointer Variables Pointer Declaration Pointer Operators Initializing Pointer.
C++ How to Program, 8/e © by Pearson Education, Inc. All Rights Reserved.
CSE 232: C++ pointers, arrays, and references Overview of References and Pointers Often need to refer to another object –Without making a copy of the object.
Pointers and Dynamic Memory Allocation Copyright Kip Irvine 2003, all rights reserved. Revised 10/28/2003.
CPSC 252 Dynamic Memory Allocation Page 1 Dynamic memory allocation Our first IntVector class has some serious limitations the capacity is fixed at MAX_SIZE.
1 Pointers and Strings Chapter 5 2 What You Will Learn...  How to use pointers Passing arguments to functions with pointers See relationship of pointers.
Nirmalya Roy School of Electrical Engineering and Computer Science Washington State University Cpt S 122 – Data Structures Pointers.
Chapter 12: Pointers, Classes, Virtual Functions, and Abstract Classes.
[S. Uludag] CIS / CSC 175 Problem Solving and Programming I Winter 2010 Suleyman Uludag Department of Computer Science, Engineering and Physics (CSEP)
Pointers. What is pointer l Everything stored in a computer program has a memory address. This is especially true of variables. char c=‘y’; int i=2; According.
CS 376b Introduction to Computer Vision 01 / 23 / 2008 Instructor: Michael Eckmann.
Pointers Class #9 – Pointers Pointers Pointers are among C++ ’ s most powerful, yet most difficult concepts to master. We ’ ve seen how we can use references.
C++ Programming: From Problem Analysis to Program Design, Third Edition Chapter 14: Pointers.
C++ for Java Programmers Chapter 2. Fundamental Daty Types Timothy Budd.
EEL 3801 C++ as an Enhancement of C. EEL 3801 – Lotzi Bölöni Comments  Can be done with // at the start of the commented line.  The end-of-line terminates.
Pointers1 WHAT IS A POINTER? Simply stated, a pointer is an address. A running program consists of three parts: execution stack, code, and data. They are.
CSE 332: C++ pointers, arrays, and references Overview of Pointers and References Often need to refer to another object –Without making a copy of the object.
Java & C++ Comparisons How important are classes and objects?? What mechanisms exist for input and output?? Are references and pointers the same thing??
1 Chapter 15-1 Pointers, Dynamic Data, and Reference Types Dale/Weems.
CMPSC 16 Problem Solving with Computers I Spring 2014 Instructor: Lucas Bang Lecture 11: Pointers.
Pointers in C by Dr P.Padmanabham Professor (CSE)&Director Bharat Institute of Engineering &Technology Hyderabad Mobile
C++ for Engineers and Scientists Second Edition Chapter 12 Pointers.
You learned how to declare pointer variables how to store the address of a variable into a pointer variable of the same type as the variable how to manipulate.
Recap Resizing the Vector Push_back function Parameters passing Mechanism Primitive Arrays of Constants Multidimensional Arrays The Standard Library string.
EGR 2261 Unit 11 Pointers and Dynamic Variables
Stack and Heap Memory Stack resident variables include:
Computer Organization and Design Pointers, Arrays and Strings in C
Chapter 7 Pointers and C-Strings
UNIT 5 C Pointers.
Introduction to Linked Lists
Chapter 13: Pointers, Classes, Virtual Functions, and Abstract Classes
Friend Class Friend Class A friend class can access private and protected members of other class in which it is declared as friend. It is sometimes useful.
Motivation and Overview
Java Primer 1: Types, Classes and Operators
Pointers.
Pointers and Memory Overview
Pointers and Pointer-Based Strings
Student Book An Introduction
C Basics.
8 Pointers.
Introduction to Linked Lists
Andy Wang Object Oriented Programming in C++ COP 3330
Pointers and References
Dynamic Memory Allocation
Chapter 12: Pointers, Classes, Virtual Functions, and Abstract Classes
Object Oriented Programming COP3330 / CGS5409
Chapter 15 Pointers, Dynamic Data, and Reference Types
7 Arrays.
Chapter 14: Pointers, Classes, Virtual Functions, and Abstract Classes
Built-In (a.k.a. Native) Types in C++
7 Arrays.
9-10 Classes: A Deeper Look.
Pointers and Pointer-Based Strings
Data Structures and Algorithms Introduction to Pointers
Pointers, Dynamic Data, and Reference Types
9-10 Classes: A Deeper Look.
四時讀書樂 (春) ~ 翁森 山光照檻水繞廊,舞雩歸詠春風香。 好鳥枝頭亦朋友,落花水面皆文章。 蹉跎莫遣韶光老,人生唯有讀書好。
SPL – PS3 C++ Classes.
SPL – PS2 C++ Memory Handling.
Introduction to Pointers
Presentation transcript:

Pointers and References Timothy Budd 9/18/2018 C++ for Java Programmers

C++ for Java Programmers Pointers Powerful Objected-Oriented mechanisms are possible due to the indirection provided through the use of pointer values. Often it is said that Java has no pointers, actually, everything is represented internally by pointer values. In C++, the use of pointers is explicit and must be directly manipulated in code. Dale Carnegie Training® can help you introduce your speaker. Copy and paste this slide at the beginning of your speaker’s presentation, then use it during the presentation to introduce the speaker. When you paste it, PowerPoint will automatically apply the look of your speaker’s presentation. When introducing a speaker, first explain the importance of the topic and how the audience will benefit. Then, tell why the speaker is qualified to speak on this topic. End with the speaker’s name. Be enthusiastic, and you will sell the audience on listening actively to the presentation. Your introduction should take no longer than sixty seconds. At the end of the presentation, be sure to take about 30 seconds to thank the speaker. When thanking a speaker, relate a specific reason why the speaker’s presentation was relevant to the audience. 9/18/2018 C++ for Java Programmers

C++ for Java Programmers Java Pointers class box { // Java box public int value; } box a = new box(); a.value = 7; // set variable a box b; b = a; Because internally reference the same value, changes to either a or b will be reflected in the other variable. 9/18/2018 C++ for Java Programmers

C++ for Java Programmers new box() a new box() b 9/18/2018 C++ for Java Programmers

C++ for Java Programmers Pointers on Pointers Pointers is simply a variable that maintain as a value the address of another location in memory. The reasons for using pointer values A single pointer variable must reference a variety of different values over the course of execution. A pointer will reference only a single value, but the particular value it will reference cannot be known at run time. The amount of memory necessary to hold a value cannot be determined at compile time, and must be allocated a run-time. 9/18/2018 C++ for Java Programmers

C++ for Java Programmers Pointers on Pointers p *p 9/18/2018 C++ for Java Programmers

C++ for Java Programmers Null Pointer A null pointer is a value that does not reference any other memory location. A null pointer is analogous to an uninitialized variable in Java. A pointer can be tested for equality to the value zero to determine whether it is a null pointer. 9/18/2018 C++ for Java Programmers

C++ for Java Programmers 4 Principal Mechanisms Can be explicitly dereferenced using the unary * operator. If p is a variable holding a pointer to a value, then *p is the value addressed by the pointer. A pointer to a structure, or class, can combine pointer dereferencing and member field extraction using the pointer operator. p  x is the same as (*p).x Can be subscripted. Useful only if the pointer addresses an array of objects. The index is used to determine the element accessed by the expression. An integer value can be added to or subtracted from a pointer in order to yield a new pointer. Assumed that the pointer references an array of values. 9/18/2018 C++ for Java Programmers

The Address-of Operator The address-of operator converts a name into a pointer. int i; // location for final value int *p; // pointer variable p = & i; // set p to point to i scanf("%d", p); // scan number into i Address-of operator can be applied directly in arguments. int i; // location for final value scanf("%d", &i); // scan number into i 9/18/2018 C++ for Java Programmers

Pointers to Simple Values Two major operations when a pointer is referencing a primitives Pointer vale to another pointer To dereference the pointer value int i = 7; int j = 11; int *p = & i; // set p to point to i *p = *p + 3; // i now has the value 10 Pointers should be compared only for equality. 9/18/2018 C++ for Java Programmers

Pointers on Simple Values Difference between modifying a pointer value and modifying the value that a pointer refers to. p = & j; // change p to point to j 9/18/2018 C++ for Java Programmers

Referencing a deleted value Nothing prevents a pointer from referencing a deleted value. int * p; // global pointer variable void Set () { int i; // local variable i = 7; // give i a value p = & i; // set p to point to it } void Use () { double d; d = 3.0; d += *p; // use the value p points to } 9/18/2018 C++ for Java Programmers

C++ for Java Programmers Pointers to Pointer A pointer to a value that is itself a pointer is declared using multiple levels of * symbols. int main (int argc, char ** argv) { ... cout << "name of program " << **argv << '\n'; return 0; } 9/18/2018 C++ for Java Programmers

C++ for Java Programmers Pointers and const Modifier const indicates whether it is the pointer itself or the value it points to that is constant. int i = 7; const int * p = &i; // pointer to a constant int * const q = &i; // constant pointer *p = 8; // not allowed, p points to a const *q = 8; // allowed, q is pointing to non const p = q; // allowed, p itself is not constant q = p; // not allowed q is constant 9/18/2018 C++ for Java Programmers

C++ for Java Programmers void * Pointers A void pointer can reference any type of value. double d; double * dp = & d; void * p = dp; A void * parameter must always be cast before it can be used. double * dp2; dp2 = (double *) p; // convert p back into pointer to double 9/18/2018 C++ for Java Programmers

C++ for Java Programmers Pointers to Functions A function pointer can be invoked without the deference operator. double fdiv (int i, int j) { return i / (double) j; } double (*fptr) (int, int); // declare variable fptr fptr = & fdiv; // assign value double x = fptr(7, 14); // call ftpr directly double x = (*fptr) (7, 14); // dereference ftpr and call 9/18/2018 C++ for Java Programmers

C++ for Java Programmers Pointers to Functions double values[100]; int comp (void * a, void * b) { double * d1 = (double *) a; double * d2 = (double *) b; return (*d1) < (*d2); } qsort (values, 100, sizeof(double), &comp); Avoid qsort in code; use the STL routines instead. 9/18/2018 C++ for Java Programmers

C++ for Java Programmers Pointers to Structure The arrow operator is a combination of dereferencing and field access. struct link { int value; link * next; // pointer to next link in chain }; link finalElement; // declare a single default element link * firstLink = & finalElement; // set pointer to initially refer to this (*firstLink).value = 7; // these two statements firstLink->value = 7; // have the same effect 9/18/2018 C++ for Java Programmers

C++ for Java Programmers Pointers to Structure for (link * p = aList; p != &finalElement; p = p->next) cout << *p << " "; 9/18/2018 C++ for Java Programmers

C++ for Java Programmers Pointers to Arrays Pointers can be subscripted just like arrays. int values[100]; int * p = values; // legal, as values is converted into a pointer p[4] = 7; // references same value as values[4] Neither pointer not array index values are checked to ensure they are in range. p[310] = 7; // index value too large p[-4] = 12; // index value too small 9/18/2018 C++ for Java Programmers

C++ for Java Programmers Pointer Arithmetic It is legal to perform arithmetic on pointers. char * text = " ... some text "; // p++ advances pointer to next location for (char * p = text; *p != '\0'; p++) if (isVowel(*p)) cout << "vowel value is " << *p << "\n"; 9/18/2018 C++ for Java Programmers

C++ for Java Programmers Reference A reference is an alias, an alternative way to name an existing object. Difference between reference and pointers A reference can never be null; it must always refer to a legitimate object. Once established, a reference can never be changed to make it point to a different object. A reference does not require any explicit mechanism to dereference the memory address and access the actual data value. 9/18/2018 C++ for Java Programmers

C++ for Java Programmers References A reference is declared by using the ampersand. int i = 7; int & j = i; // j is an alias for i j++; // i is now 8 i += 3; // i is now 11, as is j A reference can be target of an assignment. Some functions will return a reference as a result for precisely this reason. int values[100]; int & index(int i) { return values[i + 2]; } index(27) = 12; // changes values[29]; 9/18/2018 C++ for Java Programmers

Pass by Reference Parameters The most common use of reference is in parameter passing. A reference parameter is an alias for the corresponding actual argument value. void passTest (int & i) { i++; i = 7; } int main ( ) { { int j = 5; passTest(j); cout << j << '\n'; return 0; } 9/18/2018 C++ for Java Programmers

Pass by Reference Parameters None of the parameter passing options in C++ matches the Java semantics. static void passTest (box i) { i.value++; i = new box(7); } public static void main (String [ ] args) { box j = new box(5); passTest(j); System.out.println("J is " + j.value); } 9/18/2018 C++ for Java Programmers

C++ for Java Programmers References as Results References can also be used as a result type for a function. 2 reasons for doing so: A reference can be used as the target of an assignment. Therefore, a function call that returns a reference can be used on the left side of an assignment. Returning a reference is more efficient than returning a value. Therefore, large values can be returned by reference. 9/18/2018 C++ for Java Programmers

Example of Reference as Result class string { ….. char & operator [ ] (unsigned int index) { return buffer[index]; } …… private: char * buffer; }; string text = "name:"; text[0] = 'f'; // change name to fame double & min (double data[ ], int n) { double minVal = data[0]; for (int i = 1; i < n; i++) if (data[i] < minVal) minVal = data; return minVal; // error, reference to local } 9/18/2018 C++ for Java Programmers