http:// proglit.com

58
http:// proglit.com/

Upload: bert

Post on 25-Feb-2016

23 views

Category:

Documents


0 download

DESCRIPTION

http:// proglit.com /. the c language. SA. BY. 1972 by Ken Thompson and Dennis Ritchie. developed concurrently with Unix C++ and Objective-C in 1980’s ANSI C89, C90, and C99 GCC (Gnu Compiler Collection) MSVC (Microsoft Visual C++). http:// proglit.com /. imperative/procedural - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: http:// proglit.com

http://proglit.com/

Page 2: http:// proglit.com

the clanguage

Page 3: http:// proglit.com

BY

SA

Page 4: http:// proglit.com
Page 5: http:// proglit.com

1972 by Ken Thompson and Dennis Ritchie

Page 6: http:// proglit.com

• developed concurrently with Unix• C++ and Objective-C in 1980’s• ANSI C89, C90, and C99

• GCC (Gnu Compiler Collection)• MSVC (Microsoft Visual C++)

Page 7: http:// proglit.com

http://proglit.com/

Page 8: http:// proglit.com

• imperative/procedural• statically typed• weakly typed

Page 9: http:// proglit.com

control of memory• explicitly manipulate individual bytes

• “portable assembly”• compact data

• manual allocation

Page 10: http:// proglit.com

calling convention

• assembly from C• C from assembly

(how functions are called in machine code)

Page 11: http:// proglit.com

systems programming(operating systems, device drivers)

performance-sensitive code(games, media players)

Page 12: http:// proglit.com

http://proglit.com/

Page 13: http:// proglit.com

basic data typeschar 1-byte signed integerint n-byte signed integerfloat single-precision floating-pointdouble double-precision floating-point

Page 14: http:// proglit.com

declarationstype name;

int monkey;float zebra;

Page 15: http:// proglit.com

functions

returnType name(parameters) {body}

Page 16: http:// proglit.com

int square(int n){ return n * n;}

int cube(int n){ return square(n) * n;}

Page 17: http:// proglit.com

char foo(int a, float b, float c){ …}

Page 18: http:// proglit.com

casting(type) expression

int x = 35;foo((char) x);

Page 19: http:// proglit.com

http://proglit.com/

Page 20: http:// proglit.com

!0 // 1!1 // 0!0.6 // 0!3 // 0!-76.5 // 0

Page 21: http:// proglit.com

void roger(int x){ if (x == 3) { int z = 9; foo(z); } else { bar(z); // z does not exist } ack(z); // z does not exist}

Page 22: http:// proglit.com

void roger(int x){ int z = 9; if (x == 3) { foo(z); } else { bar(z); } ack(z);}

Page 23: http:// proglit.com

int main(){ printf(“Hello, world!”); return 0;}

Page 24: http:// proglit.com

http://proglit.com/

Page 25: http:// proglit.com

value variables

float a = 9.3;

Page 26: http:// proglit.com

pointers(a data type representing an address)

int *foo;double *bar;char *ack;

Page 27: http:// proglit.com

reference operator&lvalue

int i;int *p;p = &i;

char c;int *p;p = &c; // error

Page 28: http:// proglit.com

reference operator&lvalue

int i;int *p;p = &i;

char c;int *p;p = (int *) &c;

Page 29: http:// proglit.com

dereference operator

*pointer

int i = 3;int *p;p = &i;i = *p + 2;

Page 30: http:// proglit.com

int i;int *p;p = &i;*p = 6;

Page 31: http:// proglit.com

http://proglit.com/

Page 32: http:// proglit.com

pointer arithmeticint i;int *p;p = &i + 2;i = *p;

Page 33: http:// proglit.com

can subtract a pointer from a pointercan’t add a pointer to a pointer

Page 34: http:// proglit.com

char *p;p = (char *) 0xB000FFFF;char c = *p;

Page 35: http:// proglit.com

int *p;p = 0;if (p) { … } // false

Page 36: http:// proglit.com

pointer comparisons== !=> <>= <=!

Page 37: http:// proglit.com

weak typing(can violate data types)

float f;f = 98.6;f = f – 2;char *p;p = (char *)&f + 2;*p = 1;

Page 38: http:// proglit.com

http://proglit.com/

Page 39: http:// proglit.com

memory allocation• malloc• free

Page 40: http:// proglit.com

void *p;p = malloc(5);float *f;f = malloc(13);…free(p);free(f);

Page 41: http:// proglit.com

sizeof operatorsizeof type

sizeof intsizeof doublesizeof(float *)

Page 42: http:// proglit.com

int *p;p = malloc(7 * sizeof(int));*(p + 6) = 35;…free(p);

Page 43: http:// proglit.com

int *p;p = malloc(7 * (sizeof int));if (p == 0) {

… // allocation failed} else {

… // allocation succeeded

free(p);}

Page 44: http:// proglit.com

http://proglit.com/

Page 45: http:// proglit.com

array(a stack-allocated contiguous block of memory)

type name[size];

float jack[8];char jill[200];

Page 46: http:// proglit.com

int i[32];char c[11];int *p;p = i;*i = -6;*(i + 1) = 8;*(c + 7) = (char) 5;

Page 47: http:// proglit.com

int sum(int *arr, int n){

int i = 0;int sum = 0;while (i < n) {sum = *(arr + i) + sum;i = i + 1;}return sum;

}

Page 48: http:// proglit.com

int a[30];…int sumA = sum(a, 30);

int *b = malloc(20 * sizeof(int));…int sumB = sum(b, 20);

Page 49: http:// proglit.com

char *fred(){

char c[30];return c;

}

Page 50: http:// proglit.com

char *fred(){

char *c = malloc(30 * sizeof(char));

return c;}

char *foo = fred();…free(foo);

Page 51: http:// proglit.com

http://proglit.com/

Page 52: http:// proglit.com

stringschar *s = “abc”;char b = *(s + 1);int i = strlen(s);

Page 53: http:// proglit.com

structure(a programmer-defined compound data type)

struct typeName {members};

struct typeName name;instance.member

Page 54: http:// proglit.com

struct cat {char *name;int age;

}; // semi-colon!

struct cat mittens;mittens.name = “Mittens”;mittens.age = 5;

Page 55: http:// proglit.com

struct cat mittens;struct cat fluffy;…mittens = fluffy;

struct cat *p = &fluffy;

mittens == fluffy // illegal

Page 56: http:// proglit.com

struct cat cats[8];

(*cats).name = “Oscar”;(*(cats + 1)).name = “Kitty”;

Page 57: http:// proglit.com

struct cat *cats = malloc(8 * (sizeof struct

cat));

Page 58: http:// proglit.com

http://proglit.com/