Pointers.

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.
1 ES 314 Advanced Programming Lec 3 Sept 8 Goals: complete discussion of pointers discuss 1-d array examples Selection sorting Insertion sorting 2-d arrays.
Pointers Applications
Engineering H192 - Computer Programming The Ohio State University Gateway Engineering Education Coalition Lect 14P. 1Winter Quarter Pointers Lecture 14.
Engineering H192 - Computer Programming Gateway Engineering Education Coalition Lect 14P. 1Winter Quarter Pointers Lecture 14.
C++ Pointers Copies from SEE C++ programming course and from Starting Out with C++: Early Objects, 8/E by Tony Gaddis, Judy Walters and Godfrey Muganda.
Computer Science and Software Engineering University of Wisconsin - Platteville 2. Pointer Yan Shi CS/SE2630 Lecture Notes.
1 Pointers Arrays have a disadvantage: Their size must be known at compile time. We would like the capability to allocate an array-like object of any needed.
C++ Data Types Structured array struct union class Address pointer reference Simple IntegralFloating char short int long enum float double long double.
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.
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.
Copyright 2005, The Ohio State University 1 Pointers, Dynamic Data, and Reference Types Review on Pointers Reference Variables Dynamic Memory Allocation.
Review 1 List Data Structure List operations List Implementation Array Linked List.
Pointers *, &, array similarities, functions, sizeof.
Lecture – Pointers1 C++ Pointers Joseph Spring/Bob Dickerson School of Computer Science Operating Systems and Computer Networks Based on notes by Bob Dickerson.
Variables and memory addresses
Pointers PART - 2. Pointers Pointers are variables that contain memory addresses as their values. A variable name directly references a value. A pointer.
1 Recall that... char str [ 8 ]; str is the base address of the array. We say str is a pointer because its value is an address. It is a pointer constant.
1 Chapter 15-1 Pointers, Dynamic Data, and Reference Types Dale/Weems.
C++ for Engineers and Scientists Second Edition Chapter 12 Pointers.
Pointers Lecture: 5. Topics 1 Pointers and the Address Operator 2 Pointer Variables 3 The Relationship Between Arrays and Pointers 4 Pointer Arithmetic.
Pointers A variable that holds an address value is called a pointer variable, or simply a pointer.  What is the data type of pointer variables? It’s not.
Overview Working directly with memory locations is beneficial. In C, pointers allow you to: change values passed as arguments to functions work directly.
Lecture 5 Pointers 1. Variable, memory location, address, value
Pointers and Dynamic Memory Allocation
Object Lifetime and Pointers
Pointers What is the data type of pointer variables?
Dynamic Storage Allocation
EGR 2261 Unit 11 Pointers and Dynamic Variables
Pointers and Dynamic Arrays
Stack and Heap Memory Stack resident variables include:
Computer Organization and Design Pointers, Arrays and Strings in C
Pointers Ritika sharma.
Computer Skills2 for Scientific Colleges
UNIT 5 C Pointers.
Chapter 13: Pointers, Classes, Virtual Functions, and Abstract Classes
Chapter 10: Pointers Starting Out with C++ Early Objects
Pointers.
Pointers and Memory Overview
Pointers Revisited What is variable address, name, value?
INC 161 , CPE 100 Computer Programming
POINTERS.
Chapter 10: Pointers Starting Out with C++ Early Objects Ninth Edition
Lecture 6 C++ Programming
CSI-121 Structured Programming Language Lecture 16 Pointers
Chapter 10: Pointers Starting Out with C++ Early Objects
Dynamic Memory Allocation
Arrays, For loop While loop Do while loop
Object Oriented Programming COP3330 / CGS5409
Chapter 10: Pointers Starting Out with C++ Early Objects Ninth Edition
Chapter 15 Pointers, Dynamic Data, and Reference Types
Pointers and Dynamic Variables
Chapter 14: Pointers, Classes, Virtual Functions, and Abstract Classes
Pointers, Dynamic Data, and Reference Types
Lecture 18 Arrays and Pointer Arithmetic
Pointers.
Computer Skills2 for Scientific Colleges
Pointers The C programming language gives us the ability to directly manipulate the contents of memory addresses via pointers. Unfortunately, this power.
Pointer Operations.
Overloading functions
POINTER CONCEPT 4/15/2019.
Data Structures and Algorithms Introduction to Pointers
ECE 103 Engineering Programming Chapter 38 C Pointers, Part 2
Pointers, Dynamic Data, and Reference Types
POINTER CONCEPT 8/3/2019.
Programming fundamentals 2 Chapter 3:Pointer
Introduction to Pointers
Presentation transcript:

Pointers

Variable A variable is a named memory location. Variables provide direct access to its memory location. A variable has a name, an address, a type,and a value: "the name identifies the variable to the programmer "the address specifies where in main memory the variable is located

What is a variable? "the type specifies how to interpret the data stored in main memory and how long the variable is "the value is the actual data stored in the variable after if has been interpreted according to a given type

Pointer variable A pointer is a variable that contains the memory location of another variable. Syntax:- type * variable name  You start by specifying the type of data stored in the location identified by the pointer. The asterisk tells the compiler that you are creating a pointer variable. Finally you give the name of the variable.

Declaring a Pointer Variable To declare ptr as an integer pointer: int *ptr; To declare ptr as a character pointer: char *ptr;

Accessing a variable through its pointer Once we declare a pointer variable we must point it to something. We can do this by assigning to the pointer the address of the variable you want to point as in the following example: ptr=# This places the address where num is stores into the variable ptr. If num is stored in memory 21260 address then the variable ptr has the value 21260.

Engineering H192 Winter 2005 Address and Pointers Memory can be conceptualized as a linear set of data locations. Variables reference the contents of a locations Pointers have a value of the address of a given location ADDR1 Contents1 ADDR2 ADDR3 ADDR4 ADDR5 ADDR6 * * * Instructor: A computer has two basic types of busses to the memory: an address and data bus. Thus far we have been concerned mainly with the data we store but not its storage location. Pointers allow us to also use the address in which our data is stored in various ways. This conceptualization of memory can be likened to a street with various address where mail is delivered. The mailman delivers the correct data (letters) to the correct address written on each piece of mail. ADDR11 Contents11 * * ADDR16 Contents16 Lecture 14

Assume ptr is a pointer variable and x is an integer variable 10 ptr &x Now ptr can access the value of x. HOW!!!! Write: *variable . For example: Cout<< *ptr; x = 10 ptr = &x

Variables, Addresses and Pointers main() { int a = 5; int b = 6; int *c; // c points to a c = &a; } Memory Value a (1001) 5 b (1003) 6 c (1005) 1001

include< stdio. h > { int num,. intptr; float x, include< stdio.h >  {  int num, *intptr;  float x, *floptr;  char ch, *cptr;  num=123;  x=12.34;  ch=’a’;  intptr=&num;  cptr=&ch;  floptr=&x;  cout<<“Num “<<*intptr,<<“ stored at address “<<intptr;  cout<<“Value “<<*floptr <<“ stored at address “<<floptr;  cout<<“Character <<*cptr <<“stored at address”<<cptr;  }

Run this code int main() { int x; int *ptr; x = 10; ptr = &x; *ptr = *ptr + 1; cout<< x; return 0; }

Pointer arithmetic Valid operations on pointers include: - the sum of a pointer and an integer - the difference of a pointer and an integer - pointer comparison the difference of two pointers. Increment/decrement in pointers assignment operator used in pointers

Example void main() { int a=25,b=78,sum; int *x,*y; x=&a; y=&b; sum= *x + *y; cout<<“Sum is : ”<<sum; }

Assignment in pointers Pointer variables can be "assigned": int *p1, *p2; p2 = p1; Assigns one pointer to another "Make p2 point to where p1 points" Do not confuse with: *p1 = *p2; Assigns "value pointed to" by p1, to "value pointed to" by p2

Diagrammatic representation

Comparison in pointers Two pointers of the same type, p and q, may be compared as long as both of them point to objects within a single memory block • Pointers may be compared using the <, >, <=, >=, == , != • When you are comparing two pointers, you are comparing the values of those pointers rather than the contents of memory locations pointed to by these pointers

Increment and decrement Data Type Initial address Operation Address after operation s Required bytes Int i=2 4046 ++ -- 4048 4044 2bytes Char c=‘x’ 4053 4054 4042 1bytes Float f=2.2 4050 4bytes Long l=2 4060 4064 4056

You can perform a limited number of arithmetic operations on pointers You can perform a limited number of arithmetic operations on pointers. These operations are: Increment and decrement Addition and subtraction Comparison Assignment The increment (++) operator increases the value of a pointer by the size of the data object the pointer refers to. For example, if the pointer refers to the second element in an array, the ++ makes the pointer refer to the third element in the array. The decrement (--) operator decreases the value of a pointer by the size of the data object the pointer refers to. For example, if the pointer refers to the second element in an array, the -- makes the pointer refer to the first element in the array.

You can add an integer to a pointer but you cannot add a pointer to a pointer. If the pointer p points to the first element in an array, the following expression causes the pointer to point to the third element in the same array: p = p + 2; If you have two pointers that point to the same array, you can subtract one pointer from the other. This operation yields the number of elements in the array that separate the two addresses that the pointers refer to. You can compare two pointers with the following operators: ==, !=, <, >, <=, and >=. Pointer comparisons are defined only when the pointers point to elements of the same array. Pointer comparisons using the == and != operators can be performed even when the pointers point to elements of different arrays. You can assign to a pointer the address of a data object, the value of another compatible pointer or the NULL pointer.

Void pointers When a variable is declared as being a pointer to type void it is known as a generic pointer. Since you cannot have a variable of type void, the pointer will not point to any data and therefore cannot be dereferenced. It is still a pointer though, to use it you just have to typecast it to another kind of pointer first. Hence the term Generic pointer.

This is very useful when you want a pointer to point to data of different types at different times. Syntax: void * variable name;

void main() { int i; char c; void void main() { int i; char c; void *data; i = 6; c = 'a'; data = &i; cout<<"the_data points to the integer value “<< *(int*) data; data = &c; cout<<"the_data now points to the character “<< *(char*) data; }

PROBLEMS WITH POINTERS

DANGLING POINTER Dangling pointers arise when an object is deleted or deallocated, without modifying the value of the pointer, so that the pointer still points to the memory location of the deallocated memory As the system may reallocate the previously freed memory to another process, if the original program then dereferences the (now) dangling pointer, unpredictable behavior may result, as the memory may now contain completely different data.

Cause: deleting an object from memory explicitly or by destroying the stack frame on return does not alter associated pointers. The pointer still points to the same location in memory even though the reference has since been deleted and may now be used for other purposes .

NULL POINTER A null pointer is a regular pointer of any pointer type which has a special value that indicates that it is not pointing to any valid reference or memory address. This value is the result of type-casting the integer value zero to any pointer type. int * p; p = 0; // p has a null pointer value

Do not confuse null pointers with void pointers Do not confuse null pointers with void pointers. A null pointer is a value that any pointer may take to represent that it is pointing to "nowhere", while a void pointer is a special type of pointer that can point to somewhere without a specific type. One refers to the value stored in the pointer itself and the other to the type of data it points to.

WILD POINTER Wild pointers arise when a pointer is used prior to initialization to some known state, which is possible in some programming languages. They show the same erratic behaviour as dangling pointers, though they are less likely to stay undetected. The wild pointer generates garbage memory location and pendent refernce.

Causes: Pointer declared but not initialized Pointer alteration Accessing destroyed data