Programming in C Pointer Basics.

Slides:



Advertisements
Similar presentations
C Language.
Advertisements

Lectures 10 & 11.
C Structures and Memory Allocation There is no class in C, but we may still want non- homogenous structures –So, we use the struct construct struct for.
1 Chapter Thirteen Pointers. 2 Pointers A pointer is a sign used to point out the direction.
David Notkin Autumn 2009 CSE303 Lecture 13 This space for rent.
Programming and Data Structure
Programming in C Pointers and Arrays, malloc( ). 7/28/092 Dynamic memory In Java, objects are created on the heap using reference variables and the new.
Kernighan/Ritchie: Kelley/Pohl:
Pointers Typedef Pointer Arithmetic Pointers and Arrays.
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.
Pointers. Topics Pointers Pointer Arithmetic Pointers and Arrays.
Copyright © 2008 Pearson Addison-Wesley. All rights reserved. Chapter 9 Pointers and Dynamic Arrays.
Pointers| SCP1103 Programming Technique C | Jumail, FSKSM, UTM, 2005 | Last Updated: September 2006 Slide 1 Pointers by Jumail Bin Taliba Faculty of Computer.
Programming in C Pointer Basics.
Chapter 13: Pointers, Classes, Virtual Functions, and Abstract Classes
C++ Programming: Program Design Including Data Structures, Fourth Edition Chapter 13: Pointers, Classes, Virtual Functions, and Abstract Classes.
C++ Programming: From Problem Analysis to Program Design, Fourth Edition Chapter 14: Pointers, Classes, Virtual Functions, and Abstract Classes.
CSC 2400 Computer Systems I Lecture 5 Pointers and Arrays.
Programming in C Advanced Pointers. Pointers to Pointers Since a pointer is a variable type, a pointer may point to another pointer.Since a pointer is.
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.
Pointers: Basics. 2 What is a pointer? First of all, it is a variable, just like other variables you studied  So it has type, storage etc. Difference:
POINTERS.
Review 1 List Data Structure List operations List Implementation Array Linked List.
Computer Organization and Design Pointers, Arrays and Strings in C Montek Singh Sep 18, 2015 Lab 5 supplement.
C++ Programming: From Problem Analysis to Program Design, Third Edition Chapter 14: Pointers.
Pointers It provides a way of accessing a variable without referring to its name. The mechanism used for this is the address of the variable.
Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 9 Pointers and Dynamic Arrays.
Copyright © 2014 Pearson Addison-Wesley. All rights reserved. Chapter 9 Pointers and Dynamic Arrays.
POINTERS IN C Pointer Basics, Pointer Arithmetic, Pointer to arrays and Pointer in functions.
Pointers: Basics. 2 Address vs. Value Each memory cell has an address associated with it
CSC 215 Pointers and Arrays. Pointers C provides two unary operators, & and *, for manipulating data using pointers The operator &, when applied to a.
Topic 5 Addresses, Pointers and Arrays. 2 Objectives (Textbook Chapter 14) You should be able to describe: Addresses and Pointers Pointer Operators Pointer.
Lecture 5 Pointers 1. Variable, memory location, address, value
CS1010 Programming Methodology
EGR 2261 Unit 11 Pointers and Dynamic Variables
Pointers and Dynamic Arrays
Computer Organization and Design Pointers, Arrays and Strings in C
User-Written Functions
Chapter 8 Arrays, Strings and Pointers
UNIT 5 C Pointers.
Pointers.
Chapter 13: Pointers, Classes, Virtual Functions, and Abstract Classes
Functions, locals, parameters, and separate compilation
Pointers.
INC 161 , CPE 100 Computer Programming
Pointer.
Lecture 6 C++ Programming
Dynamic Memory Allocation
Chapter 12: Pointers, Classes, Virtual Functions, and Abstract Classes
Programming in C Pointer Basics.
Pointers and Dynamic Variables
Pointers Department of Computer Science-BGU יום רביעי 21 נובמבר 2018.
Chapter 14: Pointers, Classes, Virtual Functions, and Abstract Classes
CMSC202 Computer Science II for Majors Lecture 04 – Pointers
Pointers Problem Solving & Program Design in C Eighth Edition
Programming in C Pointer Basics.
Chapter 16 Pointers and Arrays
Overloading functions
C++ Pointers and Strings
Data Structures and Algorithms Introduction to Pointers
Exercise Arrays.
Chapter 9: Pointers and String
Programming in C Pointers and Arrays.
Module 9 Pointers.
ETE 132 Lecture 6 By Munirul Haque.
Programming in C Pointer Basics.
C Structures and Memory Allocation
Programming in C Advanced Pointers.
C++ Pointers and Strings
C Pointers Another ref:
Presentation transcript:

Programming in C Pointer Basics

What is a pointer In a generic sense, a “pointer” tells us where something can be found. Addresses in the phone book URLs for webpages In programming, a pointer variable contains the memory address of A variable An array Dynamically allocated memory 1/14/10

Why Pointers? They allow you to refer to large data structures in a compact way They facilitate sharing between different parts of programs They make it possible to get new memory dynamically as your program is running They make it easy to represent relationships among data items. 1/14/10

Pointer Caution They are a powerful low-level device. Undisciplined use can be confusing and thus the source of subtle, hard-to-find bugs. Program crashes Memory leaks Unpredictable results 1/14/10

Java Reference vs. C Pointers In Java, a reference variable is used to give a name to an object. The reference variable contains the memory address at which the object is stored. Truck ford = new Truck( ); Since C does not support objects, it does not provide reference variables. However, C provides pointer variables which contain the memory address of another variable (sometimes called the “pointee”). A pointer may point to any kind of variable. 1/14/10

C Pointer Variables To declare a pointer variable, we must do two things Use the “*” (star) character to indicate that the variable being defined is a pointer type. Indicate the type of variable to which the pointer will point (the pointee). This is necessary because C provides operations on pointers (e.g., *, ++, etc) whose meaning depends on the type of the pointee. General declaration of a pointer type *nameOfPointer; 1/14/10

Pointer Declaration 1/14/10 The declaration int *intPtr; defines the variable intPtr to be a pointer to a variable of type int. intPtr will contain the memory address of some int variable or int array. Read this declaration as “intPtr is a pointer to an int”, or equivalently “*intPtr is an int” Caution -- Be careful when defining multiple variables on the same line. In this definition int *intPtr, intPtr2; intPtr is a pointer to an int, but intPtr2 is not! 1/14/10

Pointer Operators The two primary operators used with pointers are * (star) and & (ampersand) The * operator is used to define pointer variables and to deference a pointer. “Dereferencing” a pointer means to use the value of the pointee. The & operator gives the address of a variable. Recall the use of & in scanf( ) 1/14/10

Pointer Examples 1/14/10 int x = 1, y = 2, z[10]; int *ip; /* ip is a pointer to an int */ ip = &x; /* ip points to (contains the memory address of) x */ y = *ip; /* y is now 1, indirectly copied from x using ip */ *ip = 0; /* x is now 0 */ ip = &z[5]; /* ip now points to z[5] */ If ip points to x, then *ip can be used anywhere x can be used so in this example *ip = *ip + 10; and x = x + 10; are equivalent The * and & operators bind more tightly than arithmetic operators so y = *ip + 1; takes the value of the variable to which ip points, adds 1 and assigns it to y Similarly, the statements *ip += 1; and ++*ip; and (*ip)++; all increment the variable to which ip points. (Note that the parenthesis are necessary in the last statement; without them, the expression would increment ip rather than what it points to since operators like * and ++ associate from right to left.) 1/14/10

Pointer and Variable types The type of a pointer and its pointee must match int a = 42; int *ip; double d = 6.34; double *dp; ip = &a; /* ok -- types match */ dp = &d; /* ok */ ip = &d; /* compiler error -- type mismatch */ dp = &a; /* compiler error */ 1/14/10

More Pointer Code Use ampersand ( & ) to obtain the address of the pointee Use star ( * ) to get / change the value of the pointee Use %p to print the value of a pointer with printf( ) What is the output from this code? int a = 1, *ptr1; /* show value and address of a ** and value of the pointer */ ptr1 = &a ; printf("a = %d, &a = %p, ptr1 = %p, *ptr1 = %d\n", a, &a, ptr1, *ptr1) ; /* change the value of a by dereferencing ptr1 ** then print again */ *ptr1 = 35 ; printf(“a = %d, &a = %p, ptr1 = %p, *ptr1 = %d\n", a, &a, ptr1, *ptr1) ; 1/14/10

NULL NULL is a special value which may be assigned to a pointer NULL indicates that this pointer does not point to any variable (there is no pointee) Often used when pointers are declared int *pInt = NULL; Often used as the return type of functions that return a pointer to indicate function failure int *myPtr = myFunction( ); if (myPtr == NULL){ /* something bad happened */ } Dereferencing a pointer whose value is NULL will result in program termination. 1/14/10

Pointers and Function Arguments Since C passes all function arguments “by value” there is no direct way for a function to alter a variable in the calling code. This version of the swap function doesn’t work. WHY NOT? /* calling swap from somewhere in main() */ int x = 42, y = 17; Swap( x, y ); /* wrong version of swap */ void Swap (int a, int b) { int temp; temp = a; a = b; b = temp; } Trace the execution of swap to show that this doesn’t work 1/14/10

A better swap( ) The desired effect can be obtained by passing pointers to the values to be exchanged. This is a very common use of pointers. /* calling swap from somewhere in main( ) */ int x = 42, y = 17; Swap( &x, &y ); /* correct version of swap */ void Swap (int *px, int *py) { int temp; temp = *px; *px = *py; *py = temp; } Trace the execution of swap showing how/where variables are changed 1/14/10

More Pointer Function Parameters Passing the address of variable(s) to a function can be used to have a function “return” multiple values. The pointer arguments point to variables in the calling code which are changed (“returned”) by the function. 1/14/10

ConvertTime.c void ConvertTime (int time, int *pHours, int *pMins) { *pHours = time / 60; *pMins = time % 60; } int main( ) int time, hours, minutes; printf("Enter a time duration in minutes: "); scanf ("%d", &time); ConvertTime (time, &hours, &minutes); printf("HH:MM format: %d:%02d\n", hours, minutes); return 0; 1/14/10

An Exercise 4, 4 3, 7 1/14/10 What is the output from this code? void F (int a, int *b) { a = 7 ; *b = a ; b = &a ; *b = 4 ; printf("%d, %d\n", a, *b) ; } int main() int m = 3, n = 5; F(m, &n) ; printf("%d, %d\n", m, n) ; return 0; 4, 4 3, 7 1/14/10

Pointers to struct /* define a struct for related student data */ typedef struct student { char name[50]; char major [20]; double gpa; } STUDENT; STUDENT bob = {"Bob Smith", "Math", 3.77}; STUDENT sally = {"Sally", "CSEE", 4.0}; STUDENT *pStudent; /* pStudent is a "pointer to struct student" */ /* make pStudent point to bob */ pStudent = &bob; /* use -> to access the members */ printf ("Bob's name: %s\n", pStudent->name); printf ("Bob's gpa : %f\n", pStudent->gpa); /* make pStudent point to sally */ pStudent = &sally; printf ("Sally's name: %s\n", pStudent->name); printf ("Sally's gpa: %f\n", pStudent->gpa); Note too that the following are equivalent. Why?? pStudent->gpa and (*pStudent).gpa /* the parentheses are necessary */ 1/14/10

Pointer to struct for functions void PrintStudent(STUDENT *studentp) { printf(“Name : %s\n”, studentp->name); printf(“Major: %s\n”, studentp->major); printf(“GPA : %4.2f”, studentp->gpa); } Passing a pointer to a struct to a function is more efficient than passing the struct itself. Why is this true? 9/24/10