C: Advanced Topics Summer 2014 COMP 2130 Intro Computer Systems Computing Science Thompson Rivers University.

Slides:



Advertisements
Similar presentations
C: Advanced Topics-II Winter 2013 COMP 2130 Intro Computer Systems Computing Science Thompson Rivers University.
Advertisements

Pointers.
Computer Programming for Engineering Applications ECE 175 Intro to Programming.
Dynamic memory allocation
Lectures 10 & 11.
Dynamic Memory Allocation in C.  What is Memory What is Memory  Memory Allocation in C Memory Allocation in C  Difference b\w static memory allocation.
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.
Files in C Rohit Khokher. Files in C Real life situations involve large volume of data and in such cases, the console oriented I/O operations pose two.
CSCI 171 Presentation 11 Pointers. Pointer Basics.
More Pointers Write a program that: –Calls a function to input an integer value –The above function calls another function that will double the input value.
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. Memory A memory or store is required in a computer to store programs (or information or data). Data used by the variables in a program.
Winter2015 COMP 2130 Intro Computer Systems Computing Science Thompson Rivers University C: Advanced Topics.
Dynamic memory allocation. The process of allocating memory at run time is known as dynamic memory allocation. C have four library functions for allocating.
Summer 2014 COMP 2130 Intro Computer Systems Computing Science Thompson Rivers University C: Formatted Files.
CSSE221: Software Dev. Honors Day 27 Announcements Announcements Projects turned in? Projects turned in? The 2 required Angel surveys are due by 9 pm tonight.
UBC104 Embedded Systems Variables, Structures & Pointers.
CSSE221: Software Dev. Honors Day 28 Announcements Announcements Simulation grades coming back Simulation grades coming back All C Projects due Friday.
15213 C Primer 17 September Outline Overview comparison of C and Java Good evening Preprocessor Command line arguments Arrays and structures Pointers.
An Introduction to C Programming (assuming that you already know Java; this is not an introduction to C++)
1 Homework Introduction to HW7 –Complexity similar to HW6 –Don’t wait until last minute to start on it File Access will be needed in HW8.
Virtual & Dynamic Memory Management Summer 2014 COMP 2130 Intro Computer Systems Computing Science Thompson Rivers University.
17. ADVANCED USES OF POINTERS. Dynamic Storage Allocation Many programs require dynamic storage allocation: the ability to allocate storage as needed.
1 Programming with Pointers Turgay Korkmaz Office: SB Phone: (210) Fax: (210) web:
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.
Winter 2015 COMP 2130 Intro Computer Systems Computing Science Thompson Rivers University C: Assignment-II Tips.
22. FILE INPUT/OUTPUT. File Pointers and Streams Declarations of functions that perform file I/O appear in. Each function requires a file pointer as a.
C What you Know* Objective: To introduce some of the features of C. This assumes that you are familiar with C++ or java and concentrates on the features.
 2007 Pearson Education, Inc. All rights reserved C File Processing.
Characters and Strings File Processing Exercise C Programming:Part 3.
File IO and command line input CSE 2451 Rong Shi.
1 COMP 2130 Introduction to Computer Systems Computing Science Thompson Rivers University.
Digital Computer Concept and Practice Copyright ©2012 by Jaejin Lee C Language Part 4.
19&20-2 Know how to declare pointer variables. Understand the & (address) and *(indirection) operators. Dynamic Memory Allocation Related Chapter: ABC.
1 File Handling. 2 Storage seen so far All variables stored in memory Problem: the contents of memory are wiped out when the computer is powered off Example:
Chapter 11 File Processing. Objectives In this chapter, you will learn: –To be able to create, read, write and update files. –To become familiar with.
Review 1 List Data Structure List operations List Implementation Array Linked List.
+ Dynamic memory allocation. + Introduction We often face situations in programming where the data is dynamics in nature. Consider a list of customers.
Computer Organization and Design Pointers, Arrays and Strings in C Montek Singh Sep 18, 2015 Lab 5 supplement.
Topics memory alignment and structures typedef for struct names bitwise & for viewing bits malloc and free (dynamic storage in C) new and delete (dynamic.
Copyright ©: Nahrstedt, Angrave, Abdelzaher1 C Basics Tarek Abdelzaher and Vikram Adve.
C LANGUAGE Characteristics of C · Small size
What we will cover A crash course in the basics of C “Teach yourself C in 21 days”
Digital Computer Concept and Practice Copyright ©2012 by Jaejin Lee C Language Part 5.
Gramming An Introduction to C Programming (assuming that you already know Java; this is not an introduction to C++)
MORE POINTERS Plus: Memory Allocation Heap versus Stack.
C: Advanced Topics Winter 2013 COMP 2130 Intro Computer Systems Computing Science Thompson Rivers University.
 2007 Pearson Education, Inc. All rights reserved. 1 C File Processing.
C Programming Day 2. 2 Copyright © 2005, Infosys Technologies Ltd ER/CORP/CRS/LA07/003 Version No. 1.0 Union –mechanism to create user defined data types.
Chapter 5 Pointers and Arrays Ku-Yaw Chang Assistant Professor, Department of Computer Science and Information Engineering Da-Yeh.
 2007 Pearson Education, Inc. All rights reserved C File Processing.
C Tutorial - Pointers CS 537 – Introduction to Operating Systems.
An Introduction to C Programming (assuming that you already know Java; this is not an introduction to C++)
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
An Introduction to C Programming
C Programming:Part 3 Characters and Strings File Processing Exercise.
CS111 Computer Programming
Pointers Problem Solving & Program Design in C Eighth Edition
Programming in C Pointer Basics.
Computing Science Thompson Rivers University
C What you Know* Objective: To introduce some of the features of C. This assumes that you are familiar with C++ or java and concentrates on the features.
Programming in C Pointer Basics.
Programming in C Pointer Basics.
15213 C Primer 17 September 2002.
COMP 2130 Intro Computer Systems Thompson Rivers University
Presentation transcript:

C: Advanced Topics Summer 2014 COMP 2130 Intro Computer Systems Computing Science Thompson Rivers University

TRU-COMP2130 Data Representation2 Course Objectives The better knowledge of computer systems, the better programing. Computer SystemC Programming Language Computer architecture CPU (Central Processing Unit) IA32 assembly language Introduction to C language Compiling, linking, loading, executing Physical main memory MMU (Memory Management Unit) Virtual memory space Memory hierarchy Cache Dynamic memory management Better coding – locality Reliable and efficient programming for power programmers (to avoid strange errors, to optimize codes, to avoid security holes, …)

TRU-COMP2130 C: Advanced Topics3 Course Contents Introduction to computer systems: B&O 1 Introduction to C programming: K&R 1 – 4 Data representations: B&O 2.1 – 2.4 C: advanced topics: K&R 5.1 – 5.10, 6 – 7 Introduction to IA32 (Intel Architecture 32): B&O 3.1 – 3.8, 3.13 Compiling, linking, loading, and executing: B&O 7 (except 7.12) Dynamic memory management – Heap: B&O – 9.9.2, – 9.9.5, 9.11 Code optimization: B&O 5.1 – 5.6, 5.13 Memory hierarchy, locality, caching: B&O 5.12, 6.1 – 6.3, – 6.4.2, 6.5, – 6.6.3, 6.7 Virtual memory (if time permits): B&O 9.4 – 9.5

TRU-COMP2130 C: Advanced Topics4 Unit Learning Objectives Use pointers and references. Use pointers for dynamic memory management. Use open(), read(), write(), close(), and FILE* functions to manipulate files. Use user-defined data structures. More coming

TRU-COMP2130 C: Advanced Topics5 Unit Contents 1. Pointers and Arrays 2. Input and Output 3. Structures 4. Self Referential structures

TRU-COMP2130 C: Advanced Topics6 1. Pointers and Arrays

TRU-COMP2130 C: Advanced Topics7 Pointers and Addresses A pointer is a variable that contains the address of a variable. Pointers and arrays are very closely related. int x = 1, y = 2, z[10]; int *ip; /* ip is a pointer to int */ ip = &x; /* ip now points to x */ y = *ip; /* y is now 1 */ *ip = 0; /* x is now 0 */ ip = &z[1]; /* ip now points to z[1] */ Declaration of a pointer variable:* Reference operator: & Indirection operator (oac dereference operator):*

TRU-COMP2130 C: Advanced Topics8 int x = 1; int y = 2; int z[10]; int *ip; ip = &x; y = *ip; *ip = 0; ip = &z[1]; Varible name valueaddress x1A... y2B zEC ip?D... z[0]?E z[1]?F z[2]?... z[3]?

TRU-COMP2130 C: Advanced Topics9 int x = 1; int y = 2; int z[10]; int *ip; ip = &x; y = *ip; *ip = 0; ip = &z[1]; Varible name valueaddress x1A... y2B zEC ip A D... z[0]?E z[1]?F z[2]?... z[3]?

TRU-COMP2130 C: Advanced Topics10 int x = 1; int y = 2; int z[10]; int *ip; ip = &x; y = *ip; *ip = 0; ip = &z[1]; Varible name valueaddress x1A... y 1 B zEC ipAD... z[0]?E z[1]?F z[2]?... z[3]?

TRU-COMP2130 C: Advanced Topics11 int x = 1; int y = 2; int z[10]; int *ip; ip = &x; y = *ip; *ip = 0; ip = &z[1]; Varible name valueaddress x 0 A... y1B zEC ipAD... z[0]?E z[1]?F z[2]?... z[3]?

TRU-COMP2130 C: Advanced Topics12 int x = 1; int y = 2; int z[10]; int *ip; ip = &x; y = *ip; *ip = 0; ip = &z[1]; *ip = 5; Varible name valueaddress x0A... y1B zEC ip F D... z[0]?E z[1]?F z[2]?... z[3]?

TRU-COMP2130 C: Advanced Topics13 int x = 1; int y = 2; int z[10]; int *ip; ip = &x; y = *ip; *ip = 0; ip = &z[1]; *ip = 5; Varible name valueaddress x0A... y1B zEC ip F D... z[0]?E z[1]5F z[2]?... z[3]?

TRU-COMP2130 C: Advanced Topics14 Pointers and Function Arguments How to write a function that swaps the values stored in two variables? swap(a, b);... void swap(int x, int y) { int temp; temp = x; x = y; y = temp; } Is the above function correct? Why? At assembly time, this function call will be expanded to create three variables in the stack area. The stack pointer will be increased as the result. The return statement is hidden. At assembly time, the return statement will be expanded to delete three variables in the stack area. The stack pointer will be decreased as the result.

TRU-COMP2130 C: Advanced Topics15 swap(a, b);... void swap(int x, int y) { int temp; temp = x; x = y; y = temp; } Varible name valueaddress a1A... b2B x1C y2D temp?E... At this moment

TRU-COMP2130 C: Advanced Topics16 swap(a, b);... void swap(int x, int y) { int temp; temp = x; x = y; y = temp; } Varible name valueaddress a1A... b2B x2C y1D temp1E... At this moment

TRU-COMP2130 C: Advanced Topics17 swap(a, b);... void swap(int x, int y) { int temp; temp = x; x = y; y = temp; } Varible name valueaddress a1A... b2B At this moment

TRU-COMP2130 C: Advanced Topics18 How to write a function that swaps the values stored in two variables? swap(&a, &b);... void swap(int *px, int* py) { int temp; temp = ???; ???; ??? = temp; } Varible name valueaddress a1A... b2B pxAC pyBD tmp?E... At this moment

TRU-COMP2130 C: Advanced Topics19 swap(&a, &b);... void swap(int *px, int* py) { int temp; temp = *px; *px = *py; *py = temp; } Varible name valueaddress a1A... b2B pxAC pyBD tmp1E...

TRU-COMP2130 C: Advanced Topics20 swap(&a, &b);... void swap(int *px, int* py) { int temp; temp = *px; *px = *py; *py = temp; } Varible name valueaddress a2A... b2B pxAC pyBD tmp1E...

TRU-COMP2130 C: Advanced Topics21 swap(&a, &b);... void swap(int *px, int* py) { int temp; temp = *px; *px = *py; *py = temp; } Varible name valueaddress a2A... b1B pxAC pyBD tmp1E...

TRU-COMP2130 C: Advanced Topics22 swap(&a, &b);... void swap(int *px, int* py) { int temp; temp = *px; *px = *py; *py = temp; } Varible name valueaddress a2A... b1B

TRU-COMP2130 C Programming23 int*test; intnumber = 20; test = &number; printf(“%d, %d, %p, %p\n”, number, *test, test, &test); // the content of the var pointed by test // the content of test *test = 30; printf(“%d, %d, %p, %p\n”, number, *test, test, &test); printf(“Enter an integer: ”); scanf(“%d”, &number); // the address of number printf(“%d, %d, %d, %p, %p, %p\n”, number, *test, *(&number), test, &test, &number);// the content pointed by test // the content pointed //by the address of number // the content of test // the address of test // the address of number

TRU-COMP2130 C: Advanced Topics24 Can you write a function to read multiple integers into an array? intdata[10]; getint(data, 10); // read 10 integers into data[]... ??? getint(???, ???) { ???// using scanf() }

TRU-COMP2130 C: Advanced Topics25 Pointers and Arrays Strong relation between and pointers float *px; // px is ready to store an address. float x[10]; // x represents 10 float type variables, // x[0], x[1],..., x[9], that are // alocated in cosecutive memory area. // x has the address of x[0]. float y; x[0] = 2; x[1] = 3; x[2] = 4; x[3] = 5; x[4] = 6; x[5] = 7; px = x;// the same data type? y = *px; printf(“%f, %f, %f\n”, x[0], *px, y); // ??? px = &x[2]; y = *(px+2); printf(“%f, %f, %f\n”, x[0], *px, y); // ???

TRU-COMP2130 C Programming26 intnumber[10]; printf(“%p\n”, &(number[0])); printf(“%p\n”, &(number[5])); printf(“%p\n”, number); // related to reference printf(“%p\n”, number + 5); // the address of number[5] // not 5 * 4 newval(number);... void newval(int num[]) { num[0] = 5;... }, or void newval(int* num) { *num = 5; *(num+1) = 10; num[2] = 20;... } int num[] and int *num are equivalent.

TRU-COMP2130 C Programming27 intnumber[10]; int *p, *q; *p = 10;// Is it wrong? p = number; q = &number[0]; number[0] = 2; number[1] = 9; number[2] = 5; printf(“%p, %p\n”, p, q); printf(“%d, %d, %d, %d\n”, *(p+1), p[1], *(q+1), q[1]); Pointer variables and array variables can be used interchangeably. Why do we need to use pointer variables?

TRU-COMP2130 C Programming28 Do we really need to use pointers? Dynamic memory management #include void *malloc(int size); // allocate size bytes // and return the addr void free(void *); // free the memory space... int *p, n; scanf(“%d”, &n); // space for n-many integer variables. p = (int*)malloc(sizeof(int) * n); p[0] = 10; *(p+1) = 20; *(p+2) = 30; p++; *p = 4;

TRU-COMP2130 C: Advanced Topics29 Character Pointers #include gets(), puts() strcpy(), strlen(), strcmp(), strcat(),... toupper(),...

TRU-COMP2130 C Programming30 char name[256], tmp[256]; name[0] = ‘C’; name[1] = ‘O’; name[2] = ‘M’; name[3] = ‘P’; name[4] = ‘\0’;// it is very important. name[5] = ‘ ’; name[6] = ‘2’; name[7] = ‘1’; name[8] = ‘3’; name[9] = ‘0’; name[10] = ‘\0’; // it is very important. printf(“course number = %s\n”, name); printf(“%p\n”, name); printf(“course number = %s\n”, &(name[5])); scanf(“%s”, name);// not &name sprintf(tmp, “course name is %s.”, name);

TRU-COMP2130 C: Advanced Topics31 3. Input and Output Standard input from keyboard $ prog < infileinput redirection $ otherprog | progpipe int getchar() int putchar(int c)

TRU-COMP2130 C: Advanced Topics32 Formatted input int scanf (char *format, arg1, arg2,...)// from stdin int sscanf (char *string, char *format, arg1, arg2,...);// from string The arguments must be references.

TRU-COMP2130 C: Advanced Topics33 File Access #include FILE *in, *out; // FILE is defined in in = fopen(“in_filename”, “r”);// mode: r, w, a, r+, w+, a+ if (in == NULL)... out = fopen(“out_filename”, “w”); fclose(in); fprintf(out, “format...”, variables...); fscanf(...); fgets(...); int fseek(FILE*, long, SEEK_SET or SEEK_CURRENT or SEEK_END); // move file position pointer int fwrite(void*, int memb_size, int no_memb, FILE*); int fread(void*, int memb_size, int no_memb, FILE*);

TRU-COMP2130 C: Advanced Topics34 int fputc(int, FILE*); int fputcs(char*, FILE*); int fgetc(FILE*); int fscanf(FILE*, char* format,...); int fprintf(FILE*, char* format,...); Examples: A file copy program, using fopen(), fseek(), fwrite(), fread(), fclose(). Files containing student records struct student {... }; struct student record; FILE *fp = fopen(“test”, “w+”); // read and write; file truncated; fwrite(&record, sizeof(struct student), 1, fp); fread(&record, sizeof(struct student), 1, fp);

TRU-COMP2130 C: Advanced Topics35 How to obtain the current position:: long ftell(FILE*);

TRU-COMP2130 C: Advanced Topics36 Error Handling – Stderr and Exit fprintf(stderr, char*,...); exit(int);// non zero means error

TRU-COMP2130 C Programming37 math.h Some MATH related functions # include double sqrt(double); double pow(double, double); double fabs(double);... Link with –lm-lm means libm.a, that contains math utilities, is used $ gcc program3-5.c –lm

TRU-COMP2130 C: Advanced Topics38 Pointer Arrays: Pointers to Pointers void f(int *x[13]); // 13 int* variables void f(int (*x)[13]); // pointer to an array of 13 ints // equivalent to int x[][13] Command-line arguments int main(int argc, char *argv[]); argcthe number of arguments argv[0]the program name, e.g., a.out argv[1]the first argument from the user E.g., $./a.out test this comp argc: 4 argv[0]: “./a.out” argv[1]: “test

TRU-COMP2130 C: Advanced Topics39 Command-line arguments int main(int argc, char *argv[]); argcthe number of arguments argv[0]the program name, e.g., a.out argv[1]the first argument from the user E.g., $./a.out test this comp argc: 4 argv[0]: “./a.out” argv[1]: “test

Command Line Arguments It is possible to pass some values from the command line in the C programs when they are executed. These values are called command line arguments These are important as they can control the ‘C’ program from outside instead of hard coding those values inside the code. The command line arguments are handled using main() function arguments argc refers to the number of arguments passed, argv[] is a pointer array which points to each argument passed to the program. TRU-COMP2130 Introduction40

Example #include int main( int argc, char *argv[] ) { if( argc == 2 ) { printf("The argument supplied is %s\n", argv[1]); } else if( argc > 2 ) { printf("Too many arguments supplied.\n"); } else { printf("One argument expected.\n"); } } $./a.out testing The argument supplied is testing TRU-COMP3710 Introduction41

Structures It is a way to have a single name referring to a group of a related values. Structures provide a way of storing many different values in variables of potentially different types under the same name. its design makes things more compact. Structs are generally useful whenever a lot of data needs to be grouped together Example: a contact group may have {name, address, phone number, and mobile number} TRU-COMP3710 Introduction42

Example struct database { int id_number; int age; float salary; }; int main() { struct database employee; /* There is now an employee variable that has modifiable variables inside it.*/ employee.age = 22; employee.id_number = 1; employee.salary = ; printf(“Employee ID = %d, Age = %d and Salary = %7.2f”, employee.id, employee.age, employee.salary); } TRU-COMP3710 Introduction43

TRU-COMP2130 C: Advanced Topics44 2. Structures User-defined data structure struct student_rcd {// class without methods in Java intstudent_number; charname[128];... };... struct student_rcd record[10], *rp; struct student_rcd test;// how to declare a struct variable test.student_number = 10;// how to access a member print_rcd(test); read_rcd(&test); record[0].student_number = 5;

TRU-COMP2130 C: Advanced Topics45 void print_rcd(struct student_rcd rcd) { printf(“Number: %d\n”, rcd.student_number); printf(“Name: %s\n”, rcd.name); // name is an array. // not &(rcd.name) } void read_rcd(struct student_rcd *rcd) { printf(“Enter number: “); scanf(“%d”, &(rcd->student_number)); // reference rqd printf(“Enter name: “); scanf(“%s”, rcd->name); // name is an array. // not &(rcd->name) }

TRU-COMP2130 C: Advanced Topics46 Self-Referential Structures struct tnode { /* the tree node: */ char *word; /* points to the text */ int count; /* number of occurrences */ struct tnode *left; /* left child */ struct tnode *right; /* right child */ struct tnode *parent; }; struct tnode root; root.left = (struct tnode *)malloc(...);

TRU-COMP2130 C: Advanced Topics47 Typedef typedef int Length; // Now Length is a data type. typedef char *String; // Now String is a data type. typedef struct tnode { /* the tree node: */ char *word; /* points to the text */ int count; /* number of occurrences */ struct tnode *left, *right; /* children */ struct tnode *parent; } Treenode; // Now Treenode is a data type.... Length len, maxlen; Length *lengths[]; String p, lineptr[MAXLINES]; Treenodetnode1;

Union A union is a special data type available in C that enables you to store different data types in the same memory location like structures The main difference is that a union may have many members, but only one member can contain a value at any given time. Unions provide an efficient way of using the same memory location for multi-purpose. TRU-COMP3710 Introduction48 #include union Data { int i; float f; char str[20]; }; int main( ) { union Data data; data.i = 10; printf( "data.i : %d\n", data.i); return 0; }

TRU-COMP2130 C: Advanced Topics49 Dynamic Memory Allocation struct Student { char name[128]; int number; Student *next; }; typedef struct Student Student; Student *head = null; // important Student *new, *tmp; new = create_student(); // create a record, read data from the user, // store them into the record add_student(head, new); // add the new record at the end of the list tmp = find_student(head, ); // find the record whose number is.. printf(“%d: %s\n”, tmp->number, tmp->name); // print the record delete_student(head, ); Name Number next Name Number next Name Number next Head null

Allocation functions Malloc() Calloc() Free() TRU-COMP2130 Introduction50

Malloc() The name malloc stands for "memory allocation". The function malloc() reserves a block of memory of specified size and return a pointer of type void which can be casted into pointer of any form. Syntax of malloc() ptr=(cast-type*)malloc(byte-size) ptr is pointer of cast-type. The malloc() function returns a pointer to an area of memory with size of byte size. If the space is insufficient, allocation fails and returns NULL pointer. Example: ptr=(int*)malloc(100*sizeof(int)); will allocate either 200 or 400 according to size of int 2 or 4 bytes respectively and the pointer points to the address of first byte of memory. TRU-COMP2130 Introduction51

Calloc() The name calloc stands for "contiguous allocation". The only difference between malloc() and calloc() is that, malloc() allocates single block of memory whereas calloc() allocates multiple blocks of memory each of same size and sets all bytes to zero. Syntax of calloc() ptr=(cast-type*)calloc(n,element-size); This statement will allocate contiguous space in memory for an array of n elements. Example: ptr=(float*)calloc(25,sizeof(float)); This statement allocates contiguous space in memory for an array of 25 elements each of size of float, i.e, 4 bytes. TRU-COMP2130 Introduction52

Free() Dynamically allocated memory with either calloc() or malloc() does not get return on its own. The programmer must use free() explicitly to release space. syntax of free() free(ptr); This statement cause the space in memory pointer by ptr to be deallocated. TRU-COMP2130 Introduction53

realloc If the previously allocated memory is insufficient or more than sufficient. Then, you can change memory size previously allocated using realloc(). Syntax of realloc() ptr=realloc(ptr,newsize); Here, ptr is reallocated with size of newsize. TRU-COMP2130 Introduction54

TRU-COMP2130 C: Advanced Topics55... create_student(... ) // create a record, read data from the user, { // store them into the record Student *new = (... )malloc(... ); scanf(“%s”,...) // read name scanf(“%d”,...) // read number new->next = null; // very important; (*new).next = null return...; };... add_student(... head,... new) // add the new record at the end of the list { Student *tmp; if (head == null) // when there is no record yet head = new; else { while((*tmp).next != null) // move to the last record tmp = (*tmp).next; // You cannot use array syntaxes (*tmp).next = new; // because the Student objects were not } // consecutively created. return; }

TRU-COMP2130 C: Advanced Topics56... find_student(... head,... no) // find the record { Student *tmp; tmp = head; while(tmp != null) { if ((... == no) break; tmp =...; }... delete_student(... head,... no) {... }