Arrays and Pointers (part 1)

Similar documents
Arrays and Pointers (part 1)

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

Arrays and Pointers. CSE 2031 Fall November 11, 2013

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

Arrays, Pointers and Memory Management

CSE2301. Arrays. Arrays. Arrays and Pointers

CSE2301. Arrays and Pointers. These slides are based on slides by Prof. Wolfgang Stuerzlinger at York University. Arrays

CSE2301. Arrays. Arrays. Arrays and Pointers

Multidimension array, array of strings

SYSC 2006 C Winter 2012

CSE2301. Dynamic memory Allocation. malloc() Dynamic Memory Allocation and Structs

Summer May 18, 2010

Quick review pointer basics (KR ch )

C: Pointers. C: Pointers. Department of Computer Science College of Engineering Boise State University. September 11, /21

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

Dynamic memory allocation (malloc)

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

Pointers. Part VI. 1) Introduction. 2) Declaring Pointer Variables. 3) Using Pointers. 4) Pointer Arithmetic. 5) Pointers and Arrays

EM108 Software Development for Engineers

Language comparison. C has pointers. Java has references. C++ has pointers and references

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

Course organization. Course introduction ( Week 1)

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

Dynamic Allocation in C

Content. In this chapter, you will learn:

Lectures 5-6: Introduction to C

Dynamic Memory Allocation

Other C materials before pointer Common library functions [Appendix of K&R] 2D array, string manipulations. <stdlib.

... Lecture 12. Pointers

Pointers. Pointers. Pointers (cont) CS 217

int marks[10]; // fixed size and fixed address No change in Memory address.

CS113: Lecture 5. Topics: Pointers. Pointers and Activation Records

Pointers. Pointer References

Lectures 5-6: Introduction to C

CSE 230 Intermediate Programming in C and C++ Arrays, Pointers and Strings

Procedural programming with C

CS 61c: Great Ideas in Computer Architecture

Arrays. An array is a collection of several elements of the same type. An array variable is declared as array name[size]

[0569] p 0318 garbage

Structures and Pointers

Memory Allocation in C

Dynamic Allocation in C

Lecture 8: Pointer Arithmetic (review) Endianness Functions and pointers

Computer Programming. C Array is a collection of data belongings to the same data type. data_type array_name[array_size];

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

Week 5 9 April 2018 NWEN 241 More on pointers. Alvin Valera. School of Engineering and Computer Science Victoria University of Wellington

Unit IV & V Previous Papers 1 mark Answers

Variation of Pointers

Character Strings. String-copy Example

MYcsvtu Notes LECTURE 34. POINTERS

Chapter 7 C Pointers

Understanding Pointers

Computer Programming Unit 3

What have we learned about when we learned about function parameters? 1-1

Homework #3 CS2255 Fall 2012

Intermediate Programming, Spring 2017*

M4.1-R3: PROGRAMMING AND PROBLEM SOLVING THROUGH C LANGUAGE

POINTERS. Content. Pointers. Benefits of Pointers. In this chapter, you will learn:

A Shotgun Introduction to C

Memory, Arrays & Pointers

Pointers and File Handling

CSE 230 Intermediate Programming in C and C++ Arrays and Pointers

Programming. Pointers, Multi-dimensional Arrays and Memory Management

dynamic memory allocation

Chapter 16. Pointers and Arrays. Address vs. Value. Another Need for Addresses

Character Arrays. strlen("hello, world"); /* string constant */ strlen(array); /* char array[100]; */ strlen(ptr); /* char *ptr; */

PDS Class Test 2. Room Sections No of students

MODULE 5: Pointers, Preprocessor Directives and Data Structures

Pointers and Structure. Bin Li Assistant Professor Dept. of Electrical, Computer and Biomedical Engineering University of Rhode Island

Jagannath Institute of Management Sciences Lajpat Nagar. BCA II Sem. C Programming

Basic and Practice in Programming Lab7

Kurt Schmidt. October 30, 2018

Subject: Fundamental of Computer Programming 2068

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

Introduction to Scientific Computing and Problem Solving

Pointer in C SHARDA UNIVERSITY. Presented By: Pushpendra K. Rajput Assistant Professor

Personal SE. Functions, Arrays, Strings & Command Line Arguments

CS61C : Machine Structures

Memory and Addresses. Pointers in C. Memory is just a sequence of byte-sized storage devices.

Aryan College. Fundamental of C Programming. Unit I: Q1. What will be the value of the following expression? (2017) A + 9

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

A Shotgun Introduction to C

C Arrays, Strings, More Pointers Instructor: Steven Ho

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

Memory Allocation. General Questions

In Java we have the keyword null, which is the value of an uninitialized reference type

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

Fundamental of Programming (C)

POINTER AND ARRAY SUNU WIBIRAMA

APS105. Malloc and 2D Arrays. Textbook Chapters 6.4, Datatype Size

Why Pointers. Pointers. Pointer Declaration. Two Pointer Operators. What Are Pointers? Memory address POINTERVariable Contents ...

Arrays in C. Prof. Indranil Sen Gupta Dept. of Computer Science & Engg. Indian Institute of Technology Kharagpur. Basic Concept

Arrays, Strings, and Pointers

C Syntax Arrays and Loops Math Strings Structures Pointers File I/O. Final Review CS Prof. Jonathan Ventura. Prof. Jonathan Ventura Final Review

Arrays, Strings, and Pointers

Slide Set 3. for ENCM 339 Fall 2017 Section 01. Steve Norman, PhD, PEng

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

CS113: Lecture 9. Topics: Dynamic Allocation. Dynamic Data Structures

Arrays and Pointers in C. Alan L. Cox

Scheme G. Sample Test Paper-I. Course Name : Computer Engineering Group Course Code : CO/CD/CM/CW/IF Semester : Second Subject Tile : Programming in C

Transcription:

Arrays and Pointers (part 1) CSE 2031 Fall 2010 17 October 2010 1 Arrays Grouping of data of the same type. Loops commonly used for manipulation. Programmers set array sizes explicitly. 2 1

Arrays: Example Syntax type name[size]; Examples int bigarray[10]; double a[3]; char grade[10], onegrade; 3 Arrays: Definition and Access Defining an array: allocates memory int score[5]; Allocates an array of 5 integers named "score" Individual parts can be called: Indexed or subscripted variables "Elements" of the array Value in brackets called index or subscript Numbered from 0 to (size 1) 4 2

Arrays Stored in Memory 1234 1235 1236 1237 1238.. a[0] a[1] a[2] a[n] 1260 1261 Some other variables 5 Initialization In declarations enclosed in curly braces int a[5] = {11,22}; Declares array a and initializes first two elements and all remaining set to zero int b[ ] = {1,2,8,9,5}; Declares array b and initializes all elements and sets the length of the array to 5 6 3

Array Access x = ar[2]; ar[3] = 2.7; What is the difference between ar[i]++, ar[i++], ar[++i]? 7 Strings No string type in C String = array of char char gretings[ ] = Hello H e l l o \0 8 4

Pointers CSE 2031 Fall 2010 9 Pointers and Addresses (5.1) Memory address of a variable Declared with data type, * and identifier type * pointer_var1, * pointer_var2, ; Example. double * p; int *p1, *p2; There has to be a * before EACH of the pointer variables 10 5

Pointers and Addresses (cont.) Use the "address of" operator (&) General form: pointer_variable = &ordinary_variable Name of the pointer Name of ordinary variable 11 Using a Pointer Variable Can be used to access a value Unary operator * used * pointer_variable In executable statement, indicates value Example int *p1, v1; v1 = 0; p1 = &v1; *p1 = 42; printf( %d\n,v1); printf( %d\n,*p1); Output: 42 42 12 6

Pointer Variables int x,y; int * z; x = 25; y = x; z = &x; 1200 1204 1208 25 25 1204 9608 8404 13 Pointer Variables (cont.) z= 1024 BAD idea Instead, use z = &x 14 7

Pointer Types y 8404 1204 int x = 25, *y, z; y = &x; z = *y; 1200 1204 1208 25 25 9608 z 15 Another Example of Pointers int *p1, *p2, x = 8, y = 9; p1 = &x; p2 = &y; 16 8

More Examples int x = 1, y = 2, z[10], k; int *ip; ip = &x; /* ip points to x*/ y = *ip; /* y is now 1 */ *ip = 0; /* x is now 0 */ z[0] = 0; ip = &z[0]; /* ip points to z[0] */ for (k = 0; k < 10; k++) z[k] = *ip + k; *ip = *ip + 100; ++*ip; (*ip)++; /* How about *ip++??? */ 17 Pointers and Function Arguments (5.2) Write a function that swaps the contents of two integers a and b. void main( ) { int a, b; /* Input a and b */ swap(a, b); printf( %d %d, a, b); { C passes arguments to functions by values. void swap(int x, int y) { int temp; temp = x; x = y; y = temp; } 18 9

The Correct Version void swap(int *px, int *py) { int temp; temp = *px; *px = *py; *py = temp; } void main( ) { int a, b; /* Input a and b */ swap(&a, &b); printf( %d %d, a, b); { 19 Arrays and Pointers 20 10

Pointers and Arrays (5.3) Identifier of an array is equivalent to the address of its first element. int numbers[20]; int * p; p = numbers numbers = p // Valid // Invalid p and numbers are equivalent and they have the same properties. Only difference is that we could assign another value to the pointer p whereas numbers will always point to the first of the 20 integer numbers of type int. 21 Pointers and Arrays: Example int a[10]; int *pa; pa = &a[0] x = *pa; /*same as x = a[0]*/ int y, z; y = *(pa + 1); z = *(pa + 2); 22 11

Pointers and Arrays: More Examples int a[10], *pa; pa = a; /* same as pa = &a[0]*/ pa++; /*same as pa = &a[1]*/ a[i] &a[i] pa[i] *(a+i) a+i *(pa+i) Notes a = pa; a++; are illegal. Think of a as a constant, not a var. p[-1], p[-2], etc. are syntactically legal. 23 Computing String Lengths /* strlen: return length of string s */ int strlen(char *s) /* or (char s[]) */ { int n; for (n = 0; *s!= '\0', s++) n++; return n; } Callers: strlen("hello, world"); /* string constant */ strlen(array); /* char array[100]; */ strlen(ptr); /* char *ptr; */ 24 12

Passing Sub-arrays to Functions It is possible to pass part of an array to a function, by passing a pointer to the beginning of the sub-array. my_func( int ar[ ] ) {...} or my_func( int *ar ) {...} my_func(&a[5]) or my_func(a + 5) 25 Arrays Passed to a Function Arrays passed to a function are passed by reference. The name of the array is a pointer to its first element. Example: copy_array(int A[ ], int B[ ]); The call above does not copy the array in the function call, just a reference to it. 26 13

Address Arithmetic (5.4) Given pointers p and q of the same type and integer n, the following pointer operations are legal: p + n, p n n is scaled according to the size of the objects p points to. If p points to an integer of 4 bytes, p + n advances by 4*n bytes. q p, q p + 1 (assuming q > p) But p + q is illegal! q = p; p = q + 100; If p and q point to different types, must cast first. Otherwise, the assignment is illegal! if ( p == q ), if ( p!= q + n ) p = NULL; if ( p == NULL ), same as if (!p ) 27 Address Arithmetic: Example /* strlen: return length of string s */ int strlen(char *s) { char *p = s; while (*p!= '\0') p++; return p - s; } 28 14

Address Arithmetic: Summary Legal: assignment of pointers of the same type adding or subtracting a pointer and an integer subtracting or comparing two pointers to members of the same array assigning or comparing to zero (NULL) Illegal: add two pointers multiply or divide or shift or mask pointer variables add float or double to pointers assign a pointer of one type to a pointer of another type (except for void *) without a cast 29 Character Pointers and Functions (5.5) A string constant ( hello world ) is an array of characters. The array is terminated with the null character '\0' so that programs can find the end. char *pmessage; pmessage = "now is the time"; assigns to pmessage a pointer to the character array. This is not a string copy; only pointers are involved. C does not provide any operators for processing an entire string of characters as a unit. 30 15

Important Difference between... char amessage[] = "now is the time"; /* an array */ char *pmessage = "now is the time"; /* a pointer */ amessage will always refer to the same storage. pmessage may later be modified to point elsewhere. 31 Example: String Copy Function /* strcpy: copy t to s; array subscript version */ void strcpy(char *s, char *t) { int i; i = 0; while ((s[i] = t[i])!= '\0') i++; } /* strcpy: copy t to s; pointer version */ void strcpy(char *s, char *t) { int i; i = 0; while ((*s = *t)!= '\0') { s++; t++; } } /* strcpy: copy t to s; pointer version 2 */ void strcpy(char *s, char *t) { while ((*s++ = *t++)!= '\0') ; } 32 16

Dynamic Memory Allocation CSE 2031 Fall 2010 17 October 2010 33 Dynamic Memory Allocation (7.8.5) How to allocate memory during run time? int x = 10; int my_array[ x ]; /* not allowed in C */ 34 17

malloc() In stdlib.h void *malloc( int n ); Allocates memory at run time. Returns a pointer (to a void) to at least n bytes available. Returns null if the memory was not allocated. The allocated memory is not initialized. 35 calloc() void *calloc( int n, int s ); Allocates an array of n elements where each element has size s; calloc( ) initializes the allocated memory all to 0. 36 18

realloc() What if we want our array to grow (or shrink)? void *realloc( void *ptr, int n ); Resizes a previously allocated block of memory. ptr must have been returned from a previous calloc, malloc, or realloc. The new array may be moved if it cannot be extended in its current location. 37 free() void free( void *ptr ) Releases the memory we previously allocated. ptr must have been returned from a previous calloc, malloc, or realloc. C does not do automatic garbage g collection. 38 19

Example #include<stdio.h> #include<stdlib.h> main() { int *a, i, n, sum=0; printf( Input an aray size ); scanf( %d, &n); a=calloc(n, sizeof(int)); for(i=0; i<n; i++) scanf( %d, &a[i]); for(i=0; i<n; i++) sum+=a[i]; free(a); printf( Number of elelments = %d and the sum is %d\n,n,sum); } 39 Next time... Structures (Chapter 6) 40 20