C advanced topics
This presentation is the property of its rightful owner.
Sponsored Links
1 / 41

C: Advanced Topics PowerPoint PPT Presentation


  • 91 Views
  • Uploaded on
  • Presentation posted in: General

C: Advanced Topics. Fall 2012 COMP 2130 Intro Computer Systems Computing Science Thompson Rivers University. Course Objectives. The better knowledge of computer systems, the better programing. Course Contents. Introduction to computer systems: B&O 1

Download Presentation

C: Advanced Topics

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


C advanced topics

C: Advanced Topics

Fall 2012

COMP 2130 Intro Computer Systems

Computing Science

Thompson Rivers University


Course objectives

Course Objectives

  • The better knowledge of computer systems, the better programing.

Data Representation


Course contents

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.1 – 9.9.2, 9.9.4 – 9.9.5, 9.11

  • Code optimization: B&O 5.1 – 5.6, 5.13 – 5.15

  • Memory hierarchy, locality, caching: B&O 5.12, 6.1 – 6.3, 6.4.1 – 6.4.2, 6.5, 6.6.2 – 6.6.3, 6.7

  • Virtual memory (if time permits): V&O 9.1 – 9.5

C: Advanced Topics


Unit learning objectives

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

C: Advanced Topics


Unit contents

Unit Contents

  • Pointers and Arrays

  • Structures

  • Input and Output

C: Advanced Topics


1 pointers and arrays

1. Pointers and Arrays

C: Advanced Topics


Pointers and addresses

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):*

C: Advanced Topics


C advanced topics

int x = 1;

int y = 2;

int z[10];

int *ip;

ip = &x;

y = *ip;

*ip = 0;

ip = &z[1];

C: Advanced Topics


C advanced topics

int x = 1;

int y = 2;

int z[10];

int *ip;

ip = &x;

y = *ip;

*ip = 0;

ip = &z[1];

C: Advanced Topics


C advanced topics

int x = 1;

int y = 2;

int z[10];

int *ip;

ip = &x;

y = *ip;

*ip = 0;

ip = &z[1];

C: Advanced Topics


C advanced topics

int x = 1;

int y = 2;

int z[10];

int *ip;

ip = &x;

y = *ip;

*ip = 0;

ip = &z[1];

C: Advanced Topics


C advanced topics

int x = 1;

int y = 2;

int z[10];

int *ip;

ip = &x;

y = *ip;

*ip = 0;

ip = &z[1];

C: Advanced Topics


Pointers and function arguments

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.

C: Advanced Topics


C advanced topics

swap(a, b);

...

void swap(int x, int y)

{

int temp;

temp = x;

x = y;

y = temp;

}

At this moment

C: Advanced Topics


C advanced topics

swap(a, b);

...

void swap(int x, int y)

{

int temp;

temp = x;

x = y;

y = temp;

}

At this moment

C: Advanced Topics


C advanced topics

swap(a, b);

...

void swap(int x, int y)

{

int temp;

temp = x;

x = y;

y = temp;

}

At this moment

C: Advanced Topics


C advanced topics

  • 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;

    }

At this moment

C: Advanced Topics


C advanced topics

swap(&a, &b);

...

void swap(int *px, int* py)

{

int temp;

temp = *px;

*px = *py;

*py = temp;

}

C: Advanced Topics


C advanced topics

swap(&a, &b);

...

void swap(int *px, int* py)

{

int temp;

temp = *px;

*px = *py;

*py = temp;

}

C: Advanced Topics


C advanced topics

swap(&a, &b);

...

void swap(int *px, int* py)

{

int temp;

temp = *px;

*px = *py;

*py = temp;

}

C: Advanced Topics


C advanced topics

swap(&a, &b);

...

void swap(int *px, int* py)

{

int temp;

temp = *px;

*px = *py;

*py = temp;

}

C: Advanced Topics


C advanced topics

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

C Programming


C advanced topics

  • 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()

    }

C: Advanced Topics


Pointers and arrays

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); // ???

C: Advanced Topics


C advanced topics

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; ... }

  • int num[] and int *num are equivalent.

C Programming


C advanced topics

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?

  • C Programming


    C advanced topics

    • Do we really need to use pointers?

    • Dynamic memory management

      #include <stdlib.h>

      void *malloc(int size); // allocate size bytes

      // and return the addr

      void free(void *); // free the memory space

      ...

      int *p, n;

      scanf(“%d”, &n);

      p = (int*)malloc(sizeof(int) * n);

      p[0] = 10; *(p+1) = 20;

    C Programming


    Character pointers

    Character Pointers

    #include <string.h.>

    gets(), puts()

    strcpy(), strlen(), strcmp(), strcat(), ...

    toupper(), ...

    C: Advanced Topics


    C advanced topics

    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);

    sprintf(tmp, “course name is %s.”, name);

    C Programming


    Pointer arrays pointers to pointers

    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[]);

      • argv[0]the program name, e.g., a.out

      • argv[1]the first argument from the user

    C: Advanced Topics


    2 structures

    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;

      rp = (struct student_rcd *)malloc(sizeof(struct student_rcd), 3);

      rp->student_number = 20;

      rp[2].student_number = 30;

      ...

    C: Advanced Topics


    C advanced topics

    void print_rcd(struct student_rcd rcd)

    {

    printf(“Number: %d\n”, rcd.student_number);

    printf(“Name: %s\n”, rcd.name); // name is an array.

    }

    void read_rcd(struct student_rcd* rcd)

    {

    printf(“Enter number: “);

    scanf(“%d”, &(rcd->student_number));

    printf(“Enter name: “);

    scanf(“%s”, rcd->name); // name is an array.

    }

    C: Advanced Topics


    Self referential structures

    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 *parrent;

    };

    struct tnode root;

    root.left = (struct tnode *)malloc(...);

    C: Advanced Topics


    Typedef

    Typedef

    typedef int Length;

    typedef char *String;

    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;

    ...

    Length len, maxlen;

    Length *lengths[];

    String p, lineptr[MAXLINES];

    Treenodetnode;

    p = (String) malloc(100);

    C: Advanced Topics


    Unions

    Unions

    union u_tag { // the shared storage

    int ival;

    float fval;

    char *sval;

    }

    ...

    union u_tag u;

    u.ival = 20;

    if (utype == INT)

    printf("%d\n", u.ival);

    if (utype == FLOAT)

    printf("%f\n", u.fval);

    if (utype == STRING)

    printf("%s\n", u.sval);

    else

    printf("bad type %d in utype\n", utype);

    C: Advanced Topics


    3 input and output

    3. Input and Output

    • Standard input from keyboard

      $ prog < infileinput redirection

      $ otherprog | progpipe

      • <stdio.h>

      • int getchar()

      • int putchar(char)

    C: Advanced Topics


    C advanced topics

    • 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.

    C: Advanced Topics


    File access

    File Access

    #include <stdio.h>

    FILE *in, *out;

    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*);

    C: Advanced Topics


    C advanced topics

    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

    C: Advanced Topics


    Error handling stderr and exit

    Error Handling – Stderr and Exit

    fprintf(stderr, char*, ...);

    exit(int);// non zero means error

    C: Advanced Topics


    Math h

    math.h

    • Some MATH related functions

      • # include <math.h>

      • 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

    C Programming


  • Login