Arrays and pointers Lone Leth Thomsen. March 2006Basis-C-5/LL2 What is an array An array is a consecutive series of variables that share one variable.

Slides:



Advertisements
Similar presentations
Chapter 7: Arrays In this chapter, you will learn about
Advertisements

Dynamic memory allocation
Programming and Data Structure
What is a pointer? First of all, it is a variable, just like other variables you studied So it has type, storage etc. Difference: it can only store the.
Managing Memory Static and Dynamic Memory Type Casts Allocating Arrays of Dynamic Size Resizing Block of Memory Returning Memory from a Function Avoiding.
Pointers A pointer is a reference to another variable (memory location) in a program –Used to change variables inside a function (reference parameters)
CSCI 171 Presentation 11 Pointers. Pointer Basics.
Pointer applications. Arrays and pointers Name of an array is a pointer constant to the first element whose value cannot be changed Address and name refer.
Kernighan/Ritchie: Kelley/Pohl:
Memory allocation CSE 2451 Matt Boggus. sizeof The sizeof unary operator will return the number of bytes reserved for a variable or data type. Determine:
POINTER Prepared by MMD, Edited by MSY1.  Basic concept of pointers  Pointer declaration  Pointer operator (& and *)  Parameter passing by reference.
Dynamic Data Structures H&K Chapter 14 Instructor – Gokcen Cilingir Cpt S 121 (July 26, 2011) Washington State University.
Chapter 10.
Chapter 9. 2 Objectives You should be able to describe: Addresses and Pointers Array Names as Pointers Pointer Arithmetic Passing Addresses Common Programming.
1 Arrays In many cases we need a group of nearly identical variables. Example: make one variable for the grade of each student in the class This results.
1 Chapter 9 Arrays and Pointers. 2  One-dimensional arrays  The Relationship between Arrays and Pointers  Pointer Arithmetic and Element Size  Passing.
1 CS 201 Passing Function as Parameter & Array Debzani Deb.
Chapter 6 C Arrays Acknowledgment The notes are adapted from those provided by Deitel & Associates, Inc. and Pearson Education Inc. Arrays are data structures.
ARRAYS AND POINTERS Although pointer types are not integer types, some integer arithmetic operators can be applied to pointers. The affect of this arithmetic.
1 Chapter 8 Functions, Pointers, and Storage Classes  Pointer  Pointers to void  Call-by-Reference  Basic Scope Rules  Storage Classes  Default Initialization.
Pointers Applications
Chapter 6Java: an Introduction to Computer Science & Programming - Walter Savitch 1 l Array Basics l Arrays in Classes and Methods l Programming with Arrays.
Prof. amr Goneid, AUC1 CSCE 110 PROGRAMMING FUNDAMENTALS WITH C++ Prof. Amr Goneid AUC Part 10. Pointers & Dynamic Data Structures.
CSEB114: PRINCIPLE OF PROGRAMMING Chapter 8: Arrays.
17. ADVANCED USES OF POINTERS. Dynamic Storage Allocation Many programs require dynamic storage allocation: the ability to allocate storage as needed.
CMPSC 16 Problem Solving with Computers I Spring 2014 Instructor: Tevfik Bultan Lecture 12: Pointers continued, C strings.
1 C - Memory Simple Types Arrays Pointers Pointer to Pointer Multi-dimensional Arrays Dynamic Memory Allocation.
Stack and Heap Memory Stack resident variables include:
Chapter 0.2 – Pointers and Memory. Type Specifiers  const  may be initialised but not used in any subsequent assignment  common and useful  volatile.
ARRAY Prepared by MMD, Edited by MSY1.  Introduction to arrays  Declaring arrays  Initializing arrays  Examples using arrays  Relationship with pointers.
Arrays Module 6. Objectives Nature and purpose of an array Using arrays in Java programs Methods with array parameter Methods that return an array Array.
C++ Programming: From Problem Analysis to Program Design, Second Edition1 Objectives In this chapter you will: Learn about the pointer data type and pointer.
Spring 2005, Gülcihan Özdemir Dağ Lecture 7, Page 1 BIL104E: Introduction to Scientific and Engineering Computing, Spring Lecture 7 Outline 7. 1.
Chapter 11: Pointers Copyright © 2008 W. W. Norton & Company. All rights reserved. 1 Chapter 11 Pointers.
Arrays  Array is a collection of same type elements under the same variable identifier referenced by index number.  Arrays are widely used within programming.
ECE 103 Engineering Programming Chapter 47 Dynamic Memory Alocation Herbert G. Mayer, PSU CS Status 6/4/2014 Initial content copied verbatim from ECE 103.
Chapter 8: Arrays Introduction to arrays Declaring arrays Initializing arrays Examples using arrays Relationship with pointers Array passing to a function.
1 CHAPTER 5 POINTER. 2 Pointers  Basic concept of pointers  Pointer declaration  Pointer operator (& and *)  Parameter passing by reference  Dynamic.
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:
1 Pointers to structs. 2 A pointer to a struct is used in the same way as a pointer to a simple type, such as an int. Pointers to structs were introduced.
19&20-2 Know how to declare pointer variables. Understand the & (address) and *(indirection) operators. Dynamic Memory Allocation Related Chapter: ABC.
 2007 Pearson Education, Inc. All rights reserved C Arrays.
ECE Application Programming
Pointers *, &, array similarities, functions, sizeof.
Computer Organization and Design Pointers, Arrays and Strings in C Montek Singh Sep 18, 2015 Lab 5 supplement.
UniMAP Sem2-10/11 DKT121: Fundamental of Computer Programming1 Arrays.
Prepared by MMD, Edited by MSY1 CHAPTER 4 ARRAY. Prepared by MMD, Edited by MSY2 Arrays  Introduction to arrays  Declaring arrays  Initializing arrays.
Pointers1 WHAT IS A POINTER? Simply stated, a pointer is an address. A running program consists of three parts: execution stack, code, and data. They are.
MORE POINTERS Plus: Memory Allocation Heap versus Stack.
CMPSC 16 Problem Solving with Computers I Spring 2014 Instructor: Lucas Bang Lecture 11: Pointers.
A FIRST BOOK OF C++ CHAPTER 8 ARRAYS AND POINTERS.
1 ENERGY 211 / CME 211 Lecture 4 September 29, 2008.
VISUAL C++ PROGRAMMING: CONCEPTS AND PROJECTS Chapter 7A Arrays (Concepts)
C Tutorial - Pointers CS 537 – Introduction to Operating Systems.
1 Agenda Arrays: Definition Memory Examples Passing arrays to functions Multi dimensional arrays.
KUKUM-06/07 EKT120: Computer Programming 1 Week 6 Arrays-Part 1.
BIL 104E Introduction to Scientific and Engineering Computing Lecture 9.
C++ for Engineers and Scientists Second Edition Chapter 12 Pointers.
Pointers: Basics. 2 Address vs. Value Each memory cell has an address associated with it
DYNAMIC MEMORY ALLOCATION. Disadvantages of ARRAYS MEMORY ALLOCATION OF ARRAY IS STATIC: Less resource utilization. For example: If the maximum elements.
Arrays and Pointers (part 1) CSE 2031 Fall July 2016.
Stack and Heap Memory Stack resident variables include:
Computer Organization and Design Pointers, Arrays and Strings in C
Arrays in C.
Lecture 6 C++ Programming
EKT150 : Computer Programming
Outline Defining and using Pointers Operations on pointers
Pointers The C programming language gives us the ability to directly manipulate the contents of memory addresses via pointers. Unfortunately, this power.
7 Arrays.
Presentation transcript:

Arrays and pointers Lone Leth Thomsen

March 2006Basis-C-5/LL2 What is an array An array is a consecutive series of variables that share one variable name The individual data items in an array must all be of the same data type, accessed using an index Often used when dealing with multiple data items possessing common characteristics E.g. 24 hourly temperature readings might be stored in array named temperature

March 2006Basis-C-5/LL3 What is an array … … n-3 n-2 n-1 Numbers denoting the array subscripts or indices These numbers indicate the value stored in array element

March 2006Basis-C-5/LL4 Basics about arrays An array uses a single identifier, together with an integer index, to create one variable that can hold many values An array is created as a normal variable, but with the addition of [ ] indicating the size of the array Each value in an array is accessed using the identifier and a valid index in [ ] Each value in the array is called an element, and the identifier by itself resolves to the address of where the array is in memory

March 2006Basis-C-5/LL5 An array has a fixed number of elements based on its creation The elements are always numbered from 0 to 1 less than the array’s size Arrays store many values but have only one identifier Basics about arrays 2

March 2006Basis-C-5/LL6 Basics about arrays 3 The array identifier represents the memory location of where the array begins The array index represents the offset to an area of storage in the array. The offset depends on the array type. For example, an int array in Unix has an offset of 4 bytes

March 2006Basis-C-5/LL7 Visual representation ? ? 23 ? int x[4]; x[2]=23; X Address Offset Identifier Value

March 2006Basis-C-5/LL8 A simple example #include int main(void) { int i, x[5], total = 0 ; for ( i = 0 ; i < 5 ; i++ ) { printf( “Enter mark %d”, i ); scanf ( “%d”, &x[ i ] ); } for ( i = 0 ; i < 5 ; i++ ) total = total + x[i]; printf ( “The average is %d”, total / 5 ); return 0; }

March 2006Basis-C-5/LL9 The array element operator [ ] The array element operator is used to reference a specific array element The expression inside the array element must resolve to type int. This value is known as an index The value of the index can be any number, but care should be taken that the index falls within the bounds of the array. The bounds of an array are defined as 0 to 1 less than the size of the array

March 2006Basis-C-5/LL10 Array example #include int main(void) { int x[5]; x[0]=23;/* valid */ x[2.3]=5;/* invalid: index is not an int */ return 0; }

March 2006Basis-C-5/LL11 Initialising arrays An array is initialized using a code block containing comma-delimited values which match in position the elements in the array If there are values in the initialisation block, but not enough to fill the array, all the elements in the array without values are initialized to 0 in the case of float or int, and NULL in the case of char

March 2006Basis-C-5/LL12 If there are values in the initialization block, an explicit size for the array does not need to be specified, only an empty array element operator. C will count the values and size the array for you Initialising arrays 2

March 2006Basis-C-5/LL13 Examples int x [ 5 ] = { 1,2,3,4,5 };size 20 bytes –creates array with elements 0-4 values 1-5 int x [ 5 ] = { 4,3 };size 20 bytes –creates array with elements 0-4 values 4,3,0,0,0 int x [ ] = { 1,2,3 };size 12 bytes –creates array with elements 0-2 values 1,2,3 char c [ 4 ] = { ‘M’, ‘o’, ‘o’ };size 4 bytes –creates array with elements 0-3 values M o o NULL

March 2006Basis-C-5/LL14 Terminology A value in an array is called an array element The number of elements stored in an array is called the array length A subscript is an integer expression enclosed in [ ] that when used in combination with the array name designates a particular element in an array

March 2006Basis-C-5/LL15 Declaration Examples int j[100]; double x[20]; j is a 100 element integer array x is a 20 element floating point array

March 2006Basis-C-5/LL16 Dimensionality The number of subscripts determines the dimensionality of an array x[i] refers to an element of a one dimensional array x y[i] [j] refers to an element of a two dimensional array y z[i] [j] [k] refers to an element of a three dimensional array z Etc.

March 2006Basis-C-5/LL17 Dimensionality 2 Variable size array declarations are not allowed, e.g. double a[n]; Remember that size is the number of elements, hence things like a[-24] and b[37.7] are not allowed It might be convenient to use a symbolic constant and not a fixed integer –Makes modification easier, e.g. #define N 100 int array_num[N];

March 2006Basis-C-5/LL18 Single v. multi-dimensional So far, we have only looked at single dimensional arrays E.g. we can represent one row of data int numbers[5] = {2,4,6,7,4}; A two dimensional array is similar to creating a table of data (also similar to a Microsoft Excel spreadsheet.) You can also create 3, 4, 5 dimensional arrays –In fact, the ANSI C specification states that compilers must be able to support up to 12 dimensions Beyond 2 dimensions, however, things can get confusing. So, we will stick to 2 for now

March 2006Basis-C-5/LL19 Why use 2-D arrays? 2-D arrays are useful for lots of applications –Anything that you would put in a table fits nicely into a 2-D array –Track company stock price for 5 different companies over 30 days. (just create a 5 x 30 array.) –Track homework grades for 5 homework assignments completed by 55 students (just create a 5 x 55 array.)

March 2006Basis-C-5/LL20 Declaring 2D arrays To declare a 1-D Array, we specify 1 size data_type array_name [size]; To declare a 2-D Array, we specify 2 sizes data_type array_name[# of rows][# of columns] Examples int a[2][3]; /* Creates a 2x3 array of ints */ double b[5][2] /* Creates a 5x2 array of doubles */

March 2006Basis-C-5/LL21 Initializing 2-D arrays To initialize a 1-D Array, just place all your data inside of brackets { } To initialize a 2-D Array, place your data inside of embedded brackets { {},{} }

March 2006Basis-C-5/LL22 int b[2][2] = { {1}, {3, 4}}; This one line will create a 2 x 2 array and initialise the array as follows Columns Rows Note: In this case, we provide one data element for the first row. After this, all remaining elements in the row are initialised to 0 Initialising a 2D array

March 2006Basis-C-5/LL23 Referencing 2D arrays To reference a 2D Array, you need to specify a row/column coordinate array_name[row #][column #] Remember that coordinate always start at 0

March 2006Basis-C-5/LL24 Assuming we have the following array b: printf ("%d", b[0][0]);/* prints 1 */ printf ("%d", b[1][0]);/* prints 3 */ printf ("%d", b[1][1]);/* prints 4 */ Examples

March 2006Basis-C-5/LL25 Array example //input ten numbers and print them out backwards #include main() { int i, num[10]; for (i=0; i<10; i++) { printf(“Please enter an integer: ”); scanf(“%d”, &num[i]); } for (i=9; i>=0; i--) printf(“ %d”, num[i]); }

March 2006Basis-C-5/LL26 Another array example // Find the lowest number in the array num[10] int min, i; min = num[0]; for (i=1; i<10; i++) { if (num[i] < min) min = num[i]; } printf(“The minimum is %d”, min);

March 2006Basis-C-5/LL27 Variable addresses Variables have two values associated with them: their content and their address A pointer is a variable which stores the memory address of another variable Consider a program which includes the following declarations int num = 0, peter = 57; char letter = ‘f’;

March 2006Basis-C-5/LL28 Variable addresses 2

March 2006Basis-C-5/LL29 Variable addresses 3 Addresses are allocated by the compiler Unlike contents, the address of the variable can not change during its lifetime The address of a given variable may differ each time the program is run The & operator gives the address of a variable Using the previous example &letteris &num is 10046

March 2006Basis-C-5/LL30 Pointers Pointer are a fundamental part of C. The secret to C is in its use of pointers Pointers are (perhaps?) the most difficult part of C to understand So - what is a pointer? A pointer is a variable which contains the address in memory of another variable. A pointer must have a certain type

March 2006Basis-C-5/LL31 Pointers 2 Pointers hold memory addresses –char * - holds memory address of a character variable –int * - holds memory address of an integer variable –Student * - holds memory address of a Student variable All pointers are of the same size regardless of what they point to (because memory addresses are all within the same range of values)

March 2006Basis-C-5/LL32 Pointer Syntax & –reference operator –returns the memory address of that variable –result is a pointer to whatever type the variable is * –dereference operator –accesses the memory address stored in the pointer –result is of whatever type the original variable was

March 2006Basis-C-5/LL33 Pointers and arrays The name of an array (with no subscript) is equivalent to a pointer to the first item in the array int numArray[10]; int * numArrayPtr; numArrayPtr = numArray; numArray[0] = 5; printf(“Ptr: %d\n”, *numArrayPtr);

March 2006Basis-C-5/LL34 Pointers and arrays 2 A pointer to the first item in an array is as good as the array itself Remember that an array is a contiguous block of memory If we have the location of the first item, and we know how much memory each item takes up, we can get to the next item easily

March 2006Basis-C-5/LL35 Generic Pointer Pointers are all the same size underneath Sometimes it is convenient to treat all pointer types interchangeably Generic pointer type: void * Function that expects void * can take any pointer as argument Important in malloc/free (more later)

March 2006Basis-C-5/LL36 Giving a pointer a value Since a pointer always holds an address, the pointer can be given a value by using the “address of” operator & together with a variable of the same type as the pointer A pointer must be given a value before you can dereference it (it has to point to something) char* pc; char c = ‘y’; pc = &c;

March 2006Basis-C-5/LL37 Dereferencing a pointer The dereference operator * is used to get the value stored at a memory location To dereference a pointer, we simply prefix it with the dereference operator char* pc; char c=‘Y’, c2 = ‘N’; pc = &c; c2 = *pc;

March 2006Basis-C-5/LL38 Pointers and arrays are very closely linked in C (array elements are stored in consecutive memory locations) E.g. int a[10], x; int* ip; ip = &a[0]; //now ip is the memory address of the first element of array a; a[i] can be represented as * (ip+i) Pointers and arrays

March 2006Basis-C-5/LL39 How pointers work Instead of referring to a variable directly, pointers provide the location where the variable exists in memory This is useful when you want to change a variable in memory within a function –Normally a function copies its arguments and changes to the passed arguments to not affect the main program –If you pass a pointer, then when you change the values at the address pointed to, the changes do affect the main program

March 2006Basis-C-5/LL40 The value of pointers If we pass a variable to a function, a copy of the variable’s value is taken by the receiving parameter If this value is a pointer, however, a copy of the address is passed. This address can then be dereferenced and the value of the address read and/or changed This allows us to change a variable when it is not in scope

March 2006Basis-C-5/LL41 Alternate syntax for array pointers Since it is not possible to tell if a pointer to a single value or a pointer to an array is being passed based on a function’s parameter list, C allows an alternate syntax for receiving a pointer, using [ ] after the pointer name instead of * before it

March 2006Basis-C-5/LL42 Passing an array #include void fun ( int * ) int main(void) { int array[ ] = { 1, 2, 3, 4, 5 }; fun ( array ); return 0; } void fun ( int * x ) { printf ( “%d”, x[3] ); // Will print 4 return; }

March 2006Basis-C-5/LL43 Pointer example #include void AddTen( int*); int main(void) { int x; printf (“Enter a number:”); scanf ( “%d”, &x );//User enters 12 AddTen( &x ); printf (“The value of x is %d”, x);//Prints 22 (x changed!) return 0; } void AddTen( int *p )//p holds the address of x { *p = *p + 10;//&x is the same as p so x is the same as *p return; }

March 2006Basis-C-5/LL44 Using pointers Given a variable y of type int*, how do we use the value at the address y points to? –The * operator lets us get the information out of the address y –The statement *y says “give me the information of the variable that y is pointing to”

March 2006Basis-C-5/LL45 Example int main() { int x = 10; int* y = &x; printf(“%d\n”, *y); } Prints the value 10 – the value in the variable at the address stored in y In other words, the value to which y points

March 2006Basis-C-5/LL46 Another example int main() { int x = 10; int* y = &x; x = 20; printf(“%d\n”, *y); } Prints the value 20 y points to x, so changing x changes *y

March 2006Basis-C-5/LL47 Swap example If we need a function to swap two values a and b, we cannot always just use swap(a,b) Instead we need to swap pointers to a and b, i.e. swap(&a,&b) Prototype for swap function must state that a pointer is being sent

March 2006Basis-C-5/LL48 #include void swap(int *, int *); int main(void) { int a = 3, b = 7; printf(“%d %d\n”, a, b); // 3 7 is printed swap(&a, &b); printf(“%d %d\n”, a, b); // 7 3 is printed retun 0; } void swap(int *p, int *q) { int tmp; tmp = *p; *p = *q; *q = tmp; }

March 2006Basis-C-5/LL49 Pointer arithmetic C even allows the use of pointer arithmetic pa = pa + 5; is the same as pa=&(pa[5]); Three operations are allowed in pointer arithmetic pointer + integer (which gives a pointer) pointer - integer (which gives a pointer) pointer - pointer (which gives an integer) The “comparison operators” (==, !=, etc.) work on pointers

March 2006Basis-C-5/LL50 Pointer arithmetic 2 Now that we have pointers, we can do pointer arithmetic int *y = &x; y = y+1; The y = y+1 will set y to the address of the “next” integer after x –If x has address 0, then it uses bytes 0, 1, 2, 3

March 2006Basis-C-5/LL51 Pointer arithmetic and arrays Since arr is an int*, what is arr+1? –The address of the next integer (four bytes forward) – which is arr[1] In general, arr+i is the memory address of arr[i] –Thus *(arr+i) is the value in arr[i]

March 2006Basis-C-5/LL52 A picture of int arr[x] Assuming arr==0 (it holds the address 0) arr[0] is at address 0 – which is equal to arr arr[1] is at address 4 – which is equal to arr+1 arr[2] is at address 8– which is equal to arr+2 arr[3] is at address 12– which is equal to arr+3 arr[4] is at address 16– which is equal to arr+4

March 2006Basis-C-5/LL53 Example int main() { int arr[20]; int i; for (i=0; i < 20; i++) { *(arr+i) = 20-i; //Assigns values to the array } for (i=0; i < 20; i++) { printf(“%d ”, arr[i]); // Prints the values }

March 2006Basis-C-5/LL54 Explanation The example prints all numbers from 1 to 20 In the example, we access the elements in two different ways –In the first loop, we use pointer arithmetic –In the second loop, we use the [] operator –They do the same thing – we could have used either method for either loop

March 2006Basis-C-5/LL55 Dynamic memory allocation Declaring variables of fixed size allocates memory in a static way – variables do not change as program runs Can also declare memory dynamically –Allocate different amounts of memory from run to run of the program –Increase/reduce amount of memory as program runs

March 2006Basis-C-5/LL56 ANSI C provides four functions to manage dynamic memory –malloc and calloc are used to allocate memory –realloc is used to reallocate memory –free is used to release memory Dynamic memory allocation 2

March 2006Basis-C-5/LL57 Allocating memory The parameter to malloc is the number of bytes of memory required The sizeof operator is often used to determine the required size Example call to malloc int *p, height; p = (int *) malloc(sizeof(height)); or p = (int *)malloc(sizeof(int));

March 2006Basis-C-5/LL58 malloc Part of the stdlib.h system file Returns a void* pointer to the first byte in the sequence malloc() takes the number of bytes to allocate returns void * pointer holding the address of the chunk of memory that was allocated Problems –need to calculate the number of bytes –need to use the void * pointer as pointer of type you want to use (eg, int *, char *)

March 2006Basis-C-5/LL59 Using malloc char * str = NULL; // allocate 10 consecutive bytes to be used to store char values str = (char *)malloc(10); // when finished, clean up free(str);

March 2006Basis-C-5/LL60 Variable-sized arrays With malloc, we have a way of declaring arrays whose sizes are not known at runtime int* arr = (int*)malloc(n*sizeof(int)) –This will reserve space for an int array of size n, whatever n happens to be at the time

March 2006Basis-C-5/LL61 Allocating memory 2 An alternative way of allocating memory is provided by the library function calloc void *calloc(size_t nobj, size_t size); calloc is short for “contiguous allocation” This function allocates memory for an array of nobj elements, each of size size

March 2006Basis-C-5/LL62 Allocating memory 3 Example call to calloc float *p; p=(float *) calloc(10, sizeof(float)); This allocates enough memory to hold 10 floating point numbers. calloc initialises the memory to 0 calloc is useful for creating arrays of variable size

March 2006Basis-C-5/LL63 Releasing memory Programs which allocate storage space as they run often do not need it for the entire run It is important to release memory once it is no longer required The standard library function free provides this facility void free( void *p); free releases the memory pointed to by p p should point to an area of storage previously allocated by malloc, calloc or realloc

March 2006Basis-C-5/LL64 free The free function frees up memory –Defined in stdlib.h –Takes a pointer of type void* Any pointer type used will be automatically cast –Releases all memory that was assigned to the pointer by malloc –Syntax: free(arr); Technically, this is: free((void*) arr);

March 2006Basis-C-5/LL65 Memory management malloc() and free() must be used carefully to avoid bugs Potential problems –dangling pointers –memory leaks

March 2006Basis-C-5/LL66 NULL – the null pointer A pointer with the address 0x0 is a null pointer Never dereference the null pointer – crash will occur Major source of bugs (common cause of ‘the blue screen of death’)

March 2006Basis-C-5/LL67 NULL pointers stdlib.h holds the following directive #define NULL 0 NULL is used to indicate that a pointer is “not pointing to anything” We can then use it in a statement like if (x==NULL) { x = (int*) malloc(10*sizeof(x)); }

March 2006Basis-C-5/LL68 Protecting against null pointers Always initialize all pointers to NULL when declaring them NULL and the null character both equivalent to false –Can be used in conditional statements

March 2006Basis-C-5/LL69 #include void bubble(int a[], int n); void prn_array(char* s, int a[], int n); void swap(int *p, int *q); int main(void) { int a[] = {7, 3, 66, 3, -5, 22, -77, 2}; int n; n = sizeof(a) / sizeof(int); prn_array("Before", a, n); bubble(a, n); /* bubble sort */ prn_array(" After", a, n); putchar('\n'); return 0; } void bubble(int a[], int n) /* n is the size of a[] */ { int i, j; for (i = 0; i < n - 1; ++i) for (j = n - 1; i < j; --j) if (a[j-1] > a[j]) swap(&a[j-1], &a[j]); }

March 2006Basis-C-5/LL70 void prn_array(char* s, int a[], int n) { int i; printf("\n%s%s%s", " ", s, " sorting:"); for (i = 0; i < n; ++i) printf("%5d", a[i]); putchar('\n'); } void swap(int *p, int *q) { int tmp; tmp = *p; *p = *q; *q = tmp; }