James Tam Pointers In this section of notes you will learn about a third type of variable that stores addresses rather than data.

Slides:



Advertisements
Similar presentations
James Tam Linked Lists in Pascal Linked Lists In this section of notes you will learn how to create and manage a dynamic list.
Advertisements

Constructor. 2 constructor The main use of constructors is to initialize objects. A constructor is a special member function, whose name is same as class.
Chapter 6 Type Checking. The compiler should report an error if an operator is applied to an incompatible operand. Type checking can be performed without.
1 Compiler Construction Intermediate Code Generation.
Principles of programming languages 4: Parameter passing, Scope rules Department of Information Science and Engineering Isao Sasano.
James Tam Arrays In this section of notes you will be introduced to a homogeneous composite type, one- dimensional arrays.
James Tam Records You will learn in this section of notes how to create a new, composite type, that can be composed of different types of elements.
James Tam Making Decisions In Pascal In this section of notes you will learn how to have your Pascal programs choose between alternative courses of action.
James Tam Breaking Problems Down This section of notes shows you how to break down a large problem into smaller modules that are easier to implement and.
James Tam Breaking Problems Down This section of notes shows you how to break down a large programming problem into smaller modules that are easier to.
James Tam Pointers In this section of notes you will learn about another type of variable that stores addresses rather than data.
James Tam Arrays In this section of notes you will be introduced to a homogeneous composite type, one- dimensional arrays.
James Tam Making Decisions In Pascal In this section of notes you will learn how to have your Pascal programs choose between alternative courses of action.
James Tam Arrays In this section of notes you will be introduced to a homogeneous composite type, one- dimensional arrays.
James Tam Introduction To Defining New Types in Pascal In this section of notes you will learn about programmer-defined types.
James Tam Introduction To Defining New Types in Pascal In this section of notes you how and why programmers can define new types.
James Tam Arrays In this section of notes you will be introduced to a homogeneous composite type arrays.
James Tam Making Decisions In Pascal In this section of notes you will learn how to have your Pascal programs choose between alternative courses of action.
James Tam Intermediate Pascal to Java examples Pascal To Java: The Transition Documentation Variables and constants Advanced input and output Decision.
James Tam Arrays In this section of notes you will be introduced to a composite type where all elements must be of the same type (homogeneous): arrays.
J. Michael Moore Scope & Testing Modules CSCE 110 Influenced by material developed by James Tam & Jennifer Welch.
James Tam Records You will learn in this section of notes how to create a new, composite type, that can be composed of different types of elements.
J. Michael Moore From James Tam’s material Multi-Dimensional Arrays CSCE 110.
James Tam Breaking Problems Down This section of notes shows you how to break down a large problem into smaller modules that are easier to implement and.
James Tam Records You will learn in this section of notes how to create a new, composite type, that can be composed of different types of elements.
James Tam Records You will learn in this section of notes how to create a new, composite type, that can be composed of different types of elements.
James Tam Getting Started With Pascal Programming What is the basic structure of a Pascal Program Variables in Pascal Performing input and output with.
James Tam Arrays In this section of notes you will be introduced to a homogeneous composite type, one- dimensional arrays.
James Tam Breaking Problems Down This section of notes shows you how to break down a large programming problem into smaller modules that are easier to.
James Tam Arrays In this section of notes you will be introduced to a homogeneous composite type, one- dimensional arrays.
James Tam Breaking Problems Down This section of notes shows you how to break down a large problem into smaller modules that are easier to implement and.
James Tam Making Decisions In Pascal In this section of notes you will learn how to have your Pascal programs choose between alternative courses of action.
James Tam Breaking Problems Down This section of notes shows you how to break down a large programming problem into smaller modules that are easier to.
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.
James Tam Records You will learn in this section of notes how to create a new, composite type, that can be composed of different types of elements.
James Tam Recursion You will learn what is recursion as well as how and when to use it in your programs.
Review on pointers and dynamic objects. Memory Management  Static Memory Allocation  Memory is allocated at compiling time  Dynamic Memory  Memory.
J. Michael Moore Modules – the Basics CSCE 110 Influenced by material developed by James Tam & Jennifer Welch.
Link Lists In this section of notes you will learn how to create and manage a dynamic list. Link Lists in Pascal.
James Tam Records You will learn in this section of notes what is a record and how to use them in Pascal.
James Tam Pointers In this section of notes you will learn about another type of variable that stores addresses rather than data.
J. Michael Moore Scope & Testing Modules CSCE 110 Influenced by material developed by James Tam & Jennifer Welch.
James Tam Breaking Problems Down This section of notes shows you how to break down a large problem into smaller modules that are easier to implement and.
James Tam Lists In this section of notes you will be introduced to new type of variable that consists of other types.
James Tam Pointers In this section of notes you will learn about another type of variable that stores addresses rather than data.
James Tam Introduction To Files In Pascal In this section of notes you will learn how to read from and write to text files in Pascal.
J. Michael Moore Modules – the Basics CSCE 110 Influenced by material developed by James Tam & Jennifer Welch.
James Tam Making Decisions In Pascal In this section of notes you will learn how to have your Pascal programs choose between alternative courses of action.
James Tam Breaking Problems Down This section of notes shows you how to break down a large problem into smaller modules that are easier to implement and.
1 Contents. 2 Run-Time Storage Organization 3 Static Allocation In many early languages, notably assembly and FORTRAN, all storage allocation is static.
Prof. amr Goneid, AUC1 CSCE 110 PROGRAMMING FUNDAMENTALS WITH C++ Prof. Amr Goneid AUC Part 10. Pointers & Dynamic Data Structures.
Runtime Environments Compiler Construction Chapter 7.
Comp 245 Data Structures Linked Lists. An Array Based List Usually is statically allocated; may not use memory efficiently Direct access to data; faster.
Chapter 7: Pointers Basic concept of pointers Pointer declaration Pointer operator (& and *) Parameter passing by reference.
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.
Chapter 13: Structures. In this chapter you will learn about: – Single structures – Arrays of structures – Structures as function arguments – Linked lists.
James Tam Multi-Dimensional Arrays In Pascal In this section of notes you will learn about how and when to use multi- dimensional arrays.
ISBN Chapter 10 Implementing Subprograms.
POINTERS IN C. Introduction  A pointer is a variable that holds a memory address  This address is the location of another object (typically another.
Data Structures in C++ Pointers & Dynamic Arrays Shinta P.
History of Computing – Pascal
Dynamic Memory Allocation
CSC 253 Lecture 8.
Pascal Prof. Steven A. Demurjian
CSC 253 Lecture 8.
Arrays In this section of notes you will be introduced to a homogeneous composite type, one-dimensional arrays One-dimensional arrays in Pascal.
Arrays In this section of notes you will be introduced to a composite type where all elements must be of the same type (homogeneous): arrays Homogeneous.
C Programming Lecture-8 Pointers and Memory Management
Breaking Problems Down
A simple function.
Presentation transcript:

James Tam Pointers In this section of notes you will learn about a third type of variable that stores addresses rather than data

James Tam Types Of Variables Pascal Variables a. Simple (atomic) b. Aggregate (composite) integercharbooleanrealHomogenous (arrays) Heterogeneous (records) 1.Data

James Tam Types Of Variables Pascal Variables a. Simple (atomic) b. Aggregate (composite) integercharbooleanrealHomogenous (arrays) Heterogeneous (records) 1.Data2. Addresses (pointers)

James Tam Declaration Of Pointer Variables Syntax: type type name = ^ type pointed to 1 ; var pointer name : type name; Example: type IntegerPointer = ^integer; var numPtr1, numPtr2 : integerPointer; num : integer; 1 You can also use the instead of the “up-arrow” ^ to declare a pointer variable

James Tam Allocating Memory For Pointers Static vs. dynamic memory e.g., array Allocating memoryDeallocating memorySyntax new (pointer name); dispose (pointer name);Example new (numPtr1); dispose (numPtr1);

James Tam Allocating Memory For Pointers Static vs. dynamic memory e.g., array Allocating memoryDeallocating memorySyntax new (pointer name); dispose (pointer name);Example new (numPtr1); dispose (numPtr1); Syntax: pointer name := NIL; Example numPtr1 := NIL;

James Tam Using Pointers Are you dealing with the pointer or what the pointer is pointing to (allocated memory)? Pointer name Pointer name ^

James Tam Using Pointers Are you dealing with the pointer or what the pointer is pointing to (allocated memory)? Pointer name Pointer name ^ pointer X variable

James Tam Using Pointers : Allowable Operations Assignment := Relational Equity = Inequity <>

James Tam Using Pointers : Assignment Syntax: (Pointer) pointer name := pointer name; (Memory pointed to) pointer name ^ := expression; Example: (Pointer) numPtr1 := numPtr2; (Memory pointed to) numPtr1^ := 100;

James Tam Using Pointers : Allowable Operations (Equity) Syntax: (Pointer) if (pointer name 1 = pointer name 2) then (Memory pointed to) if (pointer name 1 ^ = pointer name 2 ^) then Example: (Pointer) if (numPtr1 := numPtr2) then (Memory pointed to) if (numPtr1 ^ := numPtr2 ^) then

James Tam Using Pointers : Allowable Operations (Inequity) Syntax: (Pointer) if (pointer name 1 <> pointer name 2) then (Memory pointed to) if (pointer name 1 ^ <> pointer name 2 ^) then Example: (Pointer) if (numPtr1 <> numPtr2) then (Memory pointed to) if (numPtr1 ^ <> numPtr2 ^) then

James Tam Accessing Pointers Syntax: (Pointer) pointer name (Memory pointed to) pointer name ^ Example: (Pointer) numPtr1 := numPtr 2; (Memory pointed to) writeln(numPtr1^);

James Tam Pointers : First Example A full version of this example can be found in Unix under: /home/231/examples/pointers/pointer1.p program pointer1 (output); type IntegerPointer = ^integer; var num, temp : integer; numPtr1, numPtr2 : integerPointer; begin writeln('Example One'); num := 10; new(numPtr1); new(numPtr2); numPtr1^ := 100; numPtr2^ := 100;

James Tam Pointers : First Example (2) writeln('num = ':11, num:3); writeln('numPtr1^ = ':11, numPtr1^:3); writeln('numPtr2^ = ':11, numPtr2^:3); if (numPtr1 = numPtr2) then writeln('numPtr1 and numPtr2 point to the same location in memory') else writeln('numPtr1 and numPtr2 point to two separate locations'); if (numPtr1 ^= numPtr2^) then writeln('Value of what numPtr1 and numPtr2 point to are equal.') else writeln('Value of what numPtr1 and numPtr2 point to are equal.'); writeln('Example two'); temp := num; num := numPtr1^; writeln('num = ':11, num:3); writeln('numPtr1^ = ':11, numPtr1^:3);

James Tam Pointers: First Example (3) writeln('Example three'); numPtr1^ := num; num := 2; writeln('num = ':11, num:3); writeln('numPtr1^ = ':11, numPtr1^:3); writeln('Example four'); numPtr2 ^ := 66; numPtr1 := numPtr2; if (numPtr1 = numPtr2) then writeln('numPtr1 and numPtr2 point to the same location in memory') else writeln('numPtr1 and numPtr2 point to two separate locations'); numPtr2^ := 33; writeln('numPtr1^ = ':11, numPtr1^); writeln('numPtr2^ = ':11, numPtr2^);

James Tam Pointers: First Example (4) dispose(numPtr1); dispose(numPtr2); numPtr1 := NIL; numPtr2 := NIL;

James Tam Pointers As Value Parameters Need to define a type for the pointer first! E.g., type CharPointer = ^char; Syntax: procedure procedure name (pointer name (1) : type of pointer (1); pointer name (2) : type of pointer (1); : : pointer name (n) : type of pointer (n)); function function name (pointer name (1) : type of pointer (1); pointer name (2) : type of pointer (1); : : pointer name (n) : type of pointer (n)); Example: procedure proc1 (charPtr : CharPointer);

James Tam Pointers As Variable Parameters Need to define a type for the pointer first! E.g., type CharPointer = ^char; Syntax: procedure procedure name (var pointer name (1) : type of pointer (1); var pointer name (2) : type of pointer (1); : : var pointer name (n) : type of pointer (n)); Example: procedure proc2 (var charPtr : CharPointer);

James Tam Returning Pointers From Functions Need to define a type for the pointer first E.g., type CharPointer = ^char; Syntax: function function name: function return type; begin function name := expression; end;

James Tam Returning Pointers From Functions (2) Example: function fun: CharPointer; var temp : CharPointer; begin new(temp); temp^ := '#'; fun := temp; end;

James Tam Pointers: Second Example A full version of this program can be found in Unix under: /home/231/examples/pointers/pointer2.p program pointer2 (output); type CharPointer = ^char; procedure proc1 (charPtr : CharPointer); var temp : CharPointer; begin writeln; writeln('In procedure proc1'); new(temp); temp^ := 'A'; charPtr := temp; writeln('temp^ = ', temp^); writeln('charPtr^ = ', charPtr^); end;

James Tam Pointers: Second Example (2) procedure proc2 (var charPtr : CharPointer); var temp : CharPointer; begin writeln; writeln('In procedure proc2'); new(temp); temp^ := 'A'; charPtr := temp; writeln('temp^ = ', temp^); writeln('charPtr^ = ', charPtr^); end;

James Tam Pointers: Second Example (3) function fun: CharPointer; var temp : CharPointer; begin new(temp); temp^ := '#'; fun := temp; end;

James Tam Pointers: Second Example (4) begin(* Main program *) var charPtr : CharPointer; new (charPtr); charPtr^ := 'a'; writeln; writeln('In the main program.'); writeln('charPtr^ = ', charPtr^); proc1(charPtr); writeln('After proc1'); writeln('charPtr^ = ', charPtr^); proc2(charPtr); writeln('After proc2'); writeln('charPtr^ = ', charPtr^); writeln; charPtr := fun; writeln('After fun'); writeln('charPtr^ = ', charPtr^); end.(* End of main program *)

James Tam Summary What are pointers Declaring pointers, allocating and deallocating memory for pointers Basic pointer operations (assignment, equality and inequality comparisons) Accessing and assigning values to the pointer vs. the memory pointed to (by the pointer) Using pointers as parameters Returning pointers from functions