23
Lecture 7: Arrays BJ Furman 06OCT2012

Lecture 7: Arrays

Embed Size (px)

DESCRIPTION

Lecture 7: Arrays. BJ Furman 06OCT2012. The Plan for Today. Announcements Review of variables and memory Arrays What is an array? How do you declare and initialize an array? How can you use an array? Array Examples Array Practice. Announcements. Midterm this week in lab - PowerPoint PPT Presentation

Citation preview

Page 1: Lecture 7: Arrays

Lecture 7: Arrays

BJ Furman

06OCT2012

Page 2: Lecture 7: Arrays

The Plan for Today

Announcements Review of variables and memory Arrays

What is an array? How do you declare and initialize an array? How can you use an array?

Array Examples Array Practice

Page 3: Lecture 7: Arrays

Announcements

Midterm this week in lab Bring: text, notes, HW, lab reports, calculator Covers everything through pointers

Lab project 7 after midterm

Page 4: Lecture 7: Arrays

Learning Objectives

Explain what a pointer is (review)

Explain what an array is

Declare and initialize an array

Use an array in a program

Page 5: Lecture 7: Arrays

What is a Pointer? - 1 Variables in general

Variable declaration informs compiler of two things:

1. Name of the variable2. Data type of the variable Actions caused:

Bytes allocated in memory Symbol table with name,

address, and value Can think of a variable as

having two "values" Value of what is stored at the

memory location (rvalue) Value of the memory location

(its address) (lvalue)

int var1 = 0;

10FE

Var address

0intvar1

Var valueVar typeVar name

Symbol Table

Memory (8-bit)Address

0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0

0x10FE

0x10FF

Bit 7 6 5 4 3 2 1 0

0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0

0x1100

0x1101

Page 6: Lecture 7: Arrays

Bit 7 6 5 4 3 2 1 0

Memory (8-bit)Address

0 0 0 0 0 0 0 0

0 0 0 0 0 0 1 1

0x10FE

0x10FF

What is a Pointer? - 2 Variables in general,

cont. Assigning a value to a

variable (i = 3;) Value is copied to the

memory location at the address listed in the symbol table

Using a variable in an expression (j = i;)

Value of what is stored at the memory location is accessed

short int i, j;

i = 3; j = i;

1100short intj

10FE

Address

short inti

ValueTypeName

Symbol Table

Page 7: Lecture 7: Arrays

What is a Pointer? - 3 Pointer variable

A variable thatcontains anaddress

Declaring apointervariable

type * varname int* ptr1; float *ptr2; char * ptr3;

Read as: "ptr1 is a pointer to an integer" "ptr2 is a pointer to a float" "ptr3 is a pointer to a char"

#include <stdio.h>

int main(){ int num1; int *ptr1 = &num1, *ptr2; num1 = 7; printf("size of num1: %d\n",sizeof(num1)); printf("value of num1: %d\n",num1); printf("address of num1: %p\n",&num1); printf("address in ptr1: %p\n",ptr1); return 0;}

&num1 means:the address forthe variable num1

•What is the size of num1?•Is &num1 == ptr1?•What address is stored in ptr2?

Always initialize pointers you declare!An uninitialized pointer is like a loaded gun pointed in a direction that you don’t know.

Page 8: Lecture 7: Arrays

Accessing What a Pointer Points To

The indirection operator * gets the value at the address stored in the pointer

#include <stdio.h>

int main(){ int num1; int *ptr1 = &num1; num1 = 7; printf("value of num1: %d\n", num1); printf("value of num1: %d\n", *ptr1); return 0;}

Page 9: Lecture 7: Arrays

Pointer - Practice 1

Declare: x_ptr, a pointer to an integer y_ptr, a pointer to a double

What do the following statements do? char *my_ptr, my_char1 = 'c', my_char2; my_ptr = &my_char1; my_char2 = *my_ptr;

What is in: my_ptr (in declaration? in second line?) my_char1 my_char2 (in declaration? in last line?)

Page 10: Lecture 7: Arrays

ASCII Table

Page 11: Lecture 7: Arrays

Why Use Pointers?

Allows a function to modify variables in the calling function (without using global variables)

Return more than one value from a function call

Pass a pointer to a large data structure rather than copying the whole structure Arrays (coming next)

Page 12: Lecture 7: Arrays

What is an Array? So far we've dealt with

scalar variables contain just one value

Arrays are collections of data of the same type that occupy contiguous memory locations

Individual values in the collection are called elements of the array

Need to declare before use:

#include <stdio.h>

int main(){ int i; char test[4]; test[0]='M'; test[1]='E'; test[2]='3'; test[3]='0'; for(i=0; i<4; i++) { printf("test[%d]=%c",i,test[i]); printf(" @ 0x%p\n",&test[i]); } return 0;}

Format (1D array) type array_name [num_elements];

Ex. Array of 4 characters named, 'test'

Page 13: Lecture 7: Arrays

What is an array? - 2

Index No. [0] [1] [2] [3 [4] [5] [6] [7] [8] [9]int nums [10];

Element No. 1 2 3 4 5 6 7 8 9 10

int nums [10]; 10 element array of integers

Element no. 3 is accessed by:nums [2]

because indexing begins at 0

Page 14: Lecture 7: Arrays

Accessing Array Elements Individual elements of an

array are accessed by their index number

** Important Note** Array indexing starts at

zero (take note of this, it is easy to forget!)

char test[4]; the first element is

test [0] the fourth element is

test [3]

#include <stdio.h>

int main(){ int i; char test[4]; test[0]='M'; test[1]='E'; test[2]='3'; test[3]='0'; for(i=0; i<4; i++) { printf("test[%d]=%c",i,test[i]); printf(" @ 0x%p\n",&test[i]); } return 0;}

Be careful! The C compiler may not stop you from indexing beyond the

boundary of your array. (What could happen?) What is test[4]?

array_practice2.c

Page 15: Lecture 7: Arrays

Initializing Array Elements Use braces to enclose

the elements Separate elements by

commas Can set number of

elements in declaration: Explicit: int nums[5] Implicit: int imp[ ] = {1, 2};

Read from the keyboard Ex. array_practice3.c

Note addresses

Ex. array_practice4.c Read from the keyboard

/* array_practice3.c */

#include <stdio.h>

int main(){ int i; int nums[5]={0,1,2,3,4}; for(i=0; i<5; i++) { printf("nums[%d]=%d",i,nums[i]); printf(" @ 0x%p\n",&nums[i]); } return 0;}

Page 16: Lecture 7: Arrays

Arrays of Multiple Dimensions - 1 Arrays can

have more than one dimension 2D matrices

commonly used in linear algebra

/* array_practice5.c */#include <stdio.h>

int main(){ int i,j; int my_array1[2][3]={{0,1,2},{3,4,5}}; for(i=0; i<2; i++) { printf("\n"); for(j=0; j<3; j++) printf("%d ", array1[i][j]); } return 0;}

Declaration for2D array: int my_array1[number_of_rows][number_of_columns]; Enclose each row of initializers in its own set of braces Note method to print and access individual elements Can think of array1 as a "2-element array of 3 elements"

Page 17: Lecture 7: Arrays

Arrays of Multiple Dimensions - 2 Arrays of more than one dimension, cont.

Declaration for 3D array: int Ary3[nx][ny][nz]; Enclose each row of initializers in its own set of braces Order of storage: far right subscript increments first (called,

‘row-major’ order) Ary3[0][0][0] Ary3[0][0][1] Ary3[0][0][2] etc. to Ary3[nx-1][ny-1][nz-1] To find the element number for Ary3[x][y][z] declared to be of

size [I] [J] [K]:

ex. If I=J=K=10, Ary3[2][0][7]--> 2(10*10)+0+7+1=208th Ex. array_practice6.c

Initializes a 4x3x2 element array Can think of array2 as a "4-element array of 3x2 element arrays"

1)()( zKyJKx

Page 18: Lecture 7: Arrays

Arrays - Practice 1

Declare: an array of 100 characters named char100 a 3x4 array of doubles named data1

Givenint my_array1[2][3]={{0,1,2},{3,4,5}};

Find my_array1[1][2] my_array1[0][0] my_array1[0][3]

Page 19: Lecture 7: Arrays

Array Names An array name by itself

is interpreted as a constant pointer to the first element of the array.

&test[0] isequivalent to test

A constant pointer to the first element of test

test[0] is equivalent to *test

first element of test

#include <stdio.h>

int main(){ int i=0; char test[]={'M','E','3','0'} printf("test[%d]==%c",i,test[i]); printf(" @ 0x%p\t",&test[i]); printf("test[%d]==%c", i, *test); printf(" @0x%p\n", test); for(i=1; i<4; i++) { printf("test[%d]==%c",i,test[i]); printf(" @ 0x%p\n",&test[i]); } return 0;}

array_practice9.c

Page 20: Lecture 7: Arrays

Pointer Arithmetic

Pointer arithmetic array[n] is equivalent to *(array + n)

Using just the name 'array' is equivalent to a constant pointer to the first element of array (i.e., base address)

Dereferencing the expression, where an integer n is added to 'array', is equivalent to indexing the array to its element at subscript n

array names cannot be changed, but pointer variables can be changed may not have: array_name = &var; the array name is a constant pointer and may not be

changed

Page 21: Lecture 7: Arrays

Passing an Array to a Function Prototype and

function header need:

data type array name [ ]

Function call with actual name of array

Note: in the function prototype and function header

char *array would also work

#include <stdio.h>void PrintArray(int elements, char array[]);int main(){

/* initialize the array */ char test[]={'M','E','3','0'};

/* get the size of the array */int num_elem=sizeof(test)/sizeof(char);

/* pass array to function */

PrintArray(num_elem, test); return 0;}/* PrintArray() function definition */void PrintArray(int num_elem, char array[]){ int i; for(i=0; i<num_elem; i++)

{ printf("test[%d]==%c",i,array[i]); printf(" @ 0x%p\n",&array[i]); }}

Page 22: Lecture 7: Arrays

Review

Page 23: Lecture 7: Arrays

References Jensen, T. (2003). A Tutorial on Pointers and Arrays

in C, available from: http://home.netcom.com/~tjensen/ptr/pointers.htm. .Visited 02OCT2009

Parlante, N. (1999) Pointer Basics, [online]. Available from: http://cslibrary.stanford.edu/106/

Passing Arrays to Functions, [online]. Available from: http://irc.essex.ac.uk/www.iota-six.co.uk/c/f3_passing_arrays_to_functions.asp. Visited 12MAR2010.

http://www.asciitable.com/. Visited 03OCT2009.