CS 61C: Great Ideas in Computer Architecture. Lecture 3: Pointers. Bernhard Boser & Randy Katz

Similar documents
CS 61C: Great Ideas in Computer Architecture. Lecture 3: Pointers. Krste Asanović & Randy Katz

Agenda. Components of a Computer. Computer Memory Type Name Addr Value. Pointer Type. Pointers. CS 61C: Great Ideas in Computer Architecture

CS 61C: Great Ideas in Computer Architecture C Pointers. Instructors: Vladimir Stojanovic & Nicholas Weaver

Arrays and Memory Management

CS 61C: Great Ideas in Computer Architecture Introduc)on to C, Part II

Agenda. Peer Instruction Question 1. Peer Instruction Answer 1. Peer Instruction Question 2 6/22/2011

Arrays and Pointers in C. Alan L. Cox

CS 61C: Great Ideas in Computer Architecture Introduc)on to C, Part II. Control. Consider memory to be a single huge array

Pointers, Arrays, Memory: AKA the cause of those Segfaults

CS 61C: Great Ideas in Computer Architecture. C Arrays, Strings, More Pointers

CS61C Machine Structures. Lecture 4 C Pointers and Arrays. 1/25/2006 John Wawrzynek. www-inst.eecs.berkeley.edu/~cs61c/

CS61C : Machine Structures

Number Review. Lecture #3 More C intro, C Strings, Arrays, & Malloc Variables. Clarification about counting down

HW1 due Monday by 9:30am Assignment online, submission details to come

ECE 15B COMPUTER ORGANIZATION

Review: C Strings. A string in C is just an array of characters. Lecture #4 C Strings, Arrays, & Malloc

Instructor: Randy H. Katz hbp://inst.eecs.berkeley.edu/~cs61c/fa13. Fall Lecture #4. Agenda

CS61C : Machine Structures

CS 61c: Great Ideas in Computer Architecture

C Arrays, Strings, More Pointers Instructor: Steven Ho

CS61C : Machine Structures

CS 61C: Great Ideas in Computer Architecture Introduction to C

CS 110 Computer Architecture. Lecture 4: Introduction to C, Part III. Instructor: Sören Schwertfeger.

Agenda. Address vs. Value Consider memory to be a single huge array. Review. Pointer Syntax. Pointers 9/9/12

More C Pointer Dangers

CS61C : Machine Structures

Review! * follows a pointer to its value! & gets the address of a variable! Pearce, Summer 2010 UCB! ! int x = 1000; Pearce, Summer 2010 UCB!

Understanding Pointers

CS 102 Computer Architecture. Lecture 2: Introduction to C, Part I. Instructor: Sören Schwertfeger.

CS61C Machine Structures. Lecture 5 C Structs & Memory Mangement. 1/27/2006 John Wawrzynek. www-inst.eecs.berkeley.edu/~cs61c/

C++ for Java Programmers

Fundamental of Programming (C)

CS 61C: Great Ideas in Computer Architecture. Lecture 4: Memory Management. Bernhard Boser & Randy Katz

Intro to C: Pointers and Arrays

So far, system calls have had easy syntax. Integer, character string, and structure arguments.

CS61C : Machine Structures

CS61C Machine Structures. Lecture 4 C Structs & Memory Management. 9/5/2007 John Wawrzynek. www-inst.eecs.berkeley.edu/~cs61c/

CS 61C: Great Ideas in Computer Architecture Introduction to C, Part III

C BOOTCAMP DAY 2. CS3600, Northeastern University. Alan Mislove. Slides adapted from Anandha Gopalan s CS132 course at Univ.

First of all, it is a variable, just like other variables you studied

CS61C : Machine Structures

Lecture 4: Outline. Arrays. I. Pointers II. III. Pointer arithmetic IV. Strings

A brief introduction to C programming for Java programmers

Reference slides! Garcia, Fall 2011 UCB! CS61C L04 Introduction to C (pt 2) (1)!

Midterm Exam Nov 8th, COMS W3157 Advanced Programming Columbia University Fall Instructor: Jae Woo Lee.

Memory, Arrays & Pointers

PRINCIPLES OF OPERATING SYSTEMS

Arrays and Pointers. CSE 2031 Fall November 11, 2013

Dynamic memory allocation (malloc)

Pointers. 1 Background. 1.1 Variables and Memory. 1.2 Motivating Pointers Massachusetts Institute of Technology

CS 11 C track: lecture 5

Reference slides! C Strings! A string in C is just an array of characters.!!!char string[] = "abc";! How do you tell how long a string is?!

Kurt Schmidt. October 30, 2018

Pointers (part 1) What are pointers? EECS We have seen pointers before. scanf( %f, &inches );! 25 September 2017

CSCI-243 Exam 1 Review February 22, 2015 Presented by the RIT Computer Science Community

Arrays and Pointers. Arrays. Arrays: Example. Arrays: Definition and Access. Arrays Stored in Memory. Initialization. EECS 2031 Fall 2014.

Under the Hood: Data Representations, Memory and Bit Operations. Computer Science 104 Lecture 3

CS 0449 Sample Midterm

Array Initialization

ECE 250 / CS 250 Computer Architecture. C to Binary: Memory & Data Representations. Benjamin Lee

Memory Corruption 101 From Primitives to Exploit

Pointers in C/C++ 1 Memory Addresses 2

Problem 2 Add the two 2 s complement signed 8-bit values given below, and express your answer in decimal.

Functions in C C Programming and Software Tools. N.C. State Department of Computer Science

Intermediate Programming, Spring 2017*

CS 222: Pointers and Manual Memory Management

Administrivia. Introduction to Computer Systems. Pointers, cont. Pointer example, again POINTERS. Project 2 posted, due October 6

Slide Set 2. for ENCM 335 in Fall Steve Norman, PhD, PEng

CS61C Machine Structures. Lecture 3 Introduction to the C Programming Language. 1/23/2006 John Wawrzynek. www-inst.eecs.berkeley.

IT 252 Computer Organization and Architecture Introduction to the C Programming Language

Incoming Exam. CS 201 Introduction to Pointers. What is a Pointer? Pointers and Addresses. High Speed Memory (RAM) Size of Variable Types.

Processor. Lecture #2 Number Rep & Intro to C classic components of all computers Control Datapath Memory Input Output

Introduction to C. Robert Escriva. Cornell CS 4411, August 30, Geared toward programmers

High-performance computing and programming Intro to C on Unix/Linux. Uppsala universitet

Pointer Basics. Lecture 13 COP 3014 Spring March 28, 2018

CS 326 Operating Systems C Programming. Greg Benson Department of Computer Science University of San Francisco

Principles of C and Memory Management

Lectures 5-6: Introduction to C

Arrays and Pointers (part 1)

Lecture 2: C Programm

M.CS201 Programming language

BASIC COMPUTATION. public static void main(string [] args) Fundamentals of Computer Science I

CS107 Handout 08 Spring 2007 April 9, 2007 The Ins and Outs of C Arrays

CS 220: Introduction to Parallel Computing. Arrays. Lecture 4

Arrays and Pointers (part 1)

Data Types and Computer Storage Arrays and Pointers. K&R, chapter 5

primitive arrays v. vectors (1)

CS 61C: Great Ideas in Computer Architecture. Lecture 23: Virtual Memory. Bernhard Boser & Randy Katz

Two s Complement Review. Two s Complement Review. Agenda. Agenda 6/21/2011

Programming Language B

Hacking in C. Pointers. Radboud University, Nijmegen, The Netherlands. Spring 2019

Arrays in C C Programming and Software Tools. N.C. State Department of Computer Science

Character Strings. String-copy Example

CS 2461: Computer Architecture I

Sir Syed University of Engineering and Technology. Computer Programming & Problem Solving ( CPPS ) Pointers. Chapter No 7

C for Java Programmers 1. Last Week. Overview of the differences between C and Java. The C language (keywords, types, functies, etc.

How about them A s!! Go Oaktown!! CS61C - Machine Structures. Lecture 4 C Structures Memory Management Dan Garcia.

Announcements. assign0 due tonight. Labs start this week. No late submissions. Very helpful for assign1

C: Pointers, Arrays, and strings. Department of Computer Science College of Engineering Boise State University. August 25, /36

Goals of this Lecture

Transcription:

CS 61C: Great Ideas in Computer Architecture Lecture 3: Pointers Bernhard Boser & Randy Katz http://inst.eecs.berkeley.edu/~cs61c

Agenda Pointers in C Arrays in C This is not on the test Pointer arithmetic Strings, main And in Conclusion, CS 61c Lecture 3: Pointers 2

Components of a Computer Processor Control Enable? Read/Write Memory Input Datapath PC Address Program Bytes Registers Write Data Arithmetic & Logic Unit (ALU) Read Data Data Output Processor-Memory Interface I/O-Memory Interfaces CS 61c Lecture 3: Pointers 3

Computer Memory int a; a = -85; printf( %d, a); Type Name Addr Value Do not confuse memory address and value. Nor a street address with the person living there. CS 61c Lecture 3: Pointers 4 108 107 106 105 104 103 102 101 100

Pointers C speak for memory addresses Notation int *x; // variable x is an address to an int int y = 9; // y is an int x = &y; // assign address of y to x // address operator int z = *x; // assign what x is pointing to to z // dereference operator *x = -7; // assign -7 to what x is pointing to What are the values of x, y, z? Type Name Addr Value 108 107 106 105 104 103 102 101 100 CS 61c Lecture 3: Pointers 5

Pointer Type Pointers have types, like other variables type of object the pointer is pointing to Examples: int *pi; // pointer to int double *pd; // pointer to double char *pc; // pointer to char CS 61c Lecture 3: Pointers 6

Generic Pointer Generic pointer Points to any object (int, double, ) Does not know type of object it references (e.g. compiler does not know) Example: void *vp; // vp holds an address to // object of arbitrary type Applications Generic functions e.g. to allocate memory malloc, free accept and return pointers of any type see next lecture CS 61c Lecture 3: Pointers 7

Pointer to struct CS 61c Lecture 3: Pointers 8

iclickers We ll start using them today Please get a clicker by Thursday, 9/8/2016 You may also submit answers by internet (REEF polling) Please get your 2 week trial right away to track down problems before you pay Register your clicker on bcourses Instructions: https://www.ets.berkeley.edu/dis cover-services/clickers/studentsgetting-started CS 61c Lecture 3: Pointers 9

Your Turn! Answer a b A 3-7 B 4 5 C -4 5 D -2 5 E 3 5 Type Name Addr Value 108 107 106 105 104 103 102 101 100 CS 61c 10

What s wrong with this Code? Output: a = 1853161526, p = 0x7fff5be57c08, *p = 0 CS 61c Lecture 3: Pointers 11

Pointers as Function Arguments C passes arguments by value i.e. it passes a copy value does not change outside function To pass by reference use a pointer Type Name Addr Value 108 107 106 105 104 103 102 101 100 CS 61c Lecture 3: Pointers 12

Parameter Passing in Java primitive types (int, char, double) by value (i.e. passes a copy) Objects by reference (i.e. passes a pointer) Java uses pointers internally But hides them from the programmer Mapping of variables to addresses is not defined in Java language No address operator (&) Gives JVM flexibility to move stuff around CS 61c Lecture 3: Pointers 13

Your Turn! Type Name Addr Value 105 104 103 102 101 100 CS 61c Answer a b c A 2 3 1 B 1 2 3 C 3 3 1 D 3 2 1 E 2 1 1

Agenda Pointers in C Arrays in C This is not on the test Pointer arithmetic Strings, main And in Conclusion, CS 61c Lecture 3: Pointers 15

C Arrays Declaration: // allocate space // random content int a[5]; // allocate & initialize int b = { 3, 2, 1 }; Element access: b[1]; a[2] = 7; Index of first element: 0 Type Name Addr Value 108 107 106 105 104 103 102 101 100 CS 61c Lecture 3: Pointers 16

Beware: no array bound checking! Output: a[0] = 1 a[1] = 2 a[2] = 3 a[3] = -1870523725 Often the result is much worse: erratic behavior segmentation fault, etc. C does not know array length! Pass as argument intofunctions CS 61c Lecture 3: Pointers 17

Use Constants, Not Literals Assign size to constant Bad pattern int i, ar[10]; for(i = 0; i < 10; i++){... } Better pattern const int ARRAY_SIZE = 10; int i, a[array_size]; for(i = 0; i < ARRAY_SIZE; i++){... } Single source of truth Avoiding maintaining two copies of the number 10 And the chance of changing only one DRY: Don t Repeat Yourself CS 61c Lecture 3: Pointers 18

Pointing to Different Size Objects Modern machines are byte-addressable Hardware s memory composed of 8-bit storage cells, each has a unique address Type declaration tells compiler how many bytes to fetch on each access through pointer E.g., 32-bit integer stored in 4 consecutive 8-bit bytes short *y int *x char *z 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 Byte address 16-bit short stored in two bytes 32-bit integer stored in four bytes 8-bit character stored in one byte CS 61c Lecture 3: Pointers 19

sizeof() operator Output: double: 8 array: 20 s: 4 sizeof(type) Returns number of bytes in object Number of bits in a byte is not standardized All modern computers: 8 bits per byte Some old computers use other values, e.g. 6 bits per byte By definition, in C sizeof(char)==1 For all other types result is hardware and compiler dependent Do not assume - Use sizeof! CS 61c Lecture 3: Pointers 20

Agenda Pointers in C Arrays in C This is not on the test Pointer arithmetic Strings, main And in Conclusion, CS 61c Lecture 3: Pointers 21

Be Considerate Chairs very noise when people get up Please: Do not leave now Do not leave during last 5 minutes of class CS 61c Lecture 3: Pointers 22

So what did Dr. Moore Predict? Transistor* cost as a function of components per chip Minimum Shifts to right: As time passes, cost decreases provided we get more Fortunately we always had good ideas to use more: o Computers o Memory o Smartphones o Internet of Things? Why a minimum? See me during office hours * Transistors: basic elements making up computers (see later) CS 61c Lecture 3: Pointers 23

Dr. Moore s Vision (in 1965) Something useful that is getting always better and less expensive is good for Society Business CS 61c Lecture 3: Pointers 24

Benefits and Drawbacks of Moore s Law next time! CS 61c Lecture 3: Pointers 25

Agenda Pointers in C Arrays in C This is not on the test Pointer arithmetic Strings, main And in Conclusion, CS 61c Lecture 3: Pointers 26

Pointer Arithmetic - char *pc = b c = 0x7fff50f54b3e pc = 0x7fff50f54b3f pc-c = 1 Type Name Byte Addr* 108 107 106 105 104 103 102 101 100 Value CS 61c 27 *Computer only uses byte addresses. Tables with blue headers are simplifications.

Pointer Arithmetic - int *pi = 20 i = 0x7fff50f54b40 pi = 0x7fff50f54b44 pi-i = 1 Type Name Byte Addr 108 107 106 105 104 103 102 101 100 Value CS 61c Lecture 3: Pointers 28

Array Name / Pointer Duality Array variable is a pointer to the first (0 th ) element Can use pointers to access array elements char *pstr and char astr[] are nearly identical declarations Differ in subtle ways: astr++ is illegal Consequences: astris an array variable, but works like a pointer astr[0] is the same as *astr astr[2] is the same as *(astr+2) Can use pointer arithmetic to access array elements CS 61c Lecture 3: Pointers 29

Arrays versus Pointer Example Type Name Addr Value 104 103 102 101 100 Output: a[1]=20, *(p+1)=20, p[2]=30 a[0]=11, a[1]=22, a[2]=33 Mixing pointer and array notation can be confusing à avoid. CS 61c Lecture 3: Pointers 30

Pointer Arithmetic Example: int n = 3; int *p; p += n; // adds n*sizeof(int) to p p -= n; // subtracts n*sizeof(int) from p Use only for arrays. Never: char *p; char a, b; p = &a; p += 1; // may point to b, or not CS 61c Lecture 3: Pointers 31

Arrays and Pointers Passing arrays: Array» pointer to the initial (0th) array element a[i] º *(a+i) An array is passed to a function as a pointer The array size (# of bytes) is lost! Usually bad style to interchange arrays and pointers Really int *array int foo(int array[], { } int unsigned int size) array[size - 1] main(void) { } int a[10], b[5]; explicitly pass size foo(a, 10) foo(b, 5) CS 61c Lecture 3: Pointers 32

Arrays and Pointers int foo(int array[], unsigned int size) { printf( %d\n, sizeof(array)); } int main(void) { int a[10], b[5]; foo(a, 10) foo(b, 5) printf( %d\n, sizeof(a)); } What does this print?... because array is really a pointer (and a pointer is architecture dependent, but likely to be 8 on modern 64 bit machines!) What does this print? 40 (provided sizeof(int)==4) 8 CS 61c Lecture 3: Pointers 33

Arrays and Pointers These code sequences have the same effect: int i; int array[5]; for (i = 0; i < 5; i++) { array[i] = ; } int *p; int array[5]; for (p = array; p < &array[5]; p++) { *p = ; } Name Type Addr Value 106 105 104 103 102 101 100 CS 61c Lecture 3: Pointers 34

Point past end of array? Array size n; want to access from 0 to n-1, but test for exit by comparing to address one element past the array const int SZ = 10; int ar[sz], *p, *q, sum = 0; p = &ar[0]; q = &ar[sz]; while (p!= q){ // sum = sum + *p; p = p + 1; sum += *p++; } Is this legal? C defines that one element past end of array must be a valid address, i.e., not cause an error CS 61c Lecture 3: Pointers 35

Valid Pointer Arithmetic Add/subtract an integer to/from a pointer Difference of 2 pointers (pointing elements in to same array) Compare pointers (<, <=, ==,!=, >, >=) Compare pointer to NULL (indicates that the pointer points to nothing) Everything makes no sense & is illegal: adding two pointers multiplying pointers subtract pointer from integer CS 61c Lecture 3: Pointers 36

Your Turn int x[] = { 2, 4, 6, 8, 10 }; int *p = x; int **pp = &p; (*pp)++; (*(*pp))++; printf("%d\n", *p); Output is: A: 2 B: 3 C: 4 D: 5 E: None of the above Name Type Addr Value 106 105 104 103 102 101 100 37

Pointers to Pointers CS 61c Lecture 3: Pointers 38

Agenda Pointers in C Arrays in C This is not on the test Pointer arithmetic Strings, main And in Conclusion, CS 61c Lecture 3: Pointers 39

C Strings C strings are nullterminated character arrays char s[] = abc ; Type Name Byte Addr 108 107 106 105 104 103 102 101 100 Value CS 61c Lecture 3: Pointers 40

String Example Output: str = abc, length = 3 CS 61c Lecture 3: Pointers 41

Concise strlen() int strlen(char *s) { char *p = s; while (*p++) ; /* Null body of while */ return (p s 1); } What happens if there is no zero character at end of string? CS 61c Lecture 3: Pointers 42

Arguments in main() To get arguments to the main function, use: int main(int argc, char *argv[]) argc is the number of strings on the command line argv is a pointer to an array containing the arguments as strings CS 61c Lecture 3: Pointers 43

Example CS 61c UNIX: $ gcc -o ex Argc.c $./ex -g a "d e f arg[0] =./ex arg[1] = -g arg[2] = a arg[3] = d e f Lecture 3: Pointers 44

Your Turn Answer Output A 4 4 4 4 B 4 4 8 6 C 8 6 8 6 D 4 4 6 6 E 4 4 8 8 CS 61c Lecture 3: Pointers 45

Agenda Pointers in C Arrays in C This is not on the test Pointer arithmetic Strings, main And in Conclusion, CS 61c Lecture 3: Pointers 46

And in Conclusion, Pointers are C speak for machine memory addresses Pointer variables are held in memory, and pointer values are just numbers that can be manipulated by software In C, close relationship between array names and pointers Pointers know the type & size of the object they point to (except void *) Like most things, pointers can be used for Pointers are powerful But, without good planning, a major source of errors Plenty of examples in the next lecture! CS 61c Lecture 3: Pointers 47