Chapter 1 - A Tutorial Introduction...........................................................................................9
1.1 Getting Started..................................................................................................................9
1.2 Variables and Arithmetic Expressions...........................................................................11
1.3 The for statement............................................................................................................16
1.4 Symbolic Constants........................................................................................................17
1.5 Character Input and Output............................................................................................18
1.5.1 File Copying............................................................................................................18
1.5.2 Character Counting.................................................................................................20
1.5.3 Line Counting..........................................................................................................21
1.5.4 Word Counting........................................................................................................22
1.6 Arrays.............................................................................................................................23
1.7 Functions........................................................................................................................25
1.8 Arguments - Call by Value.............................................................................................28
1.9 Character Arrays............................................................................................................29
1.10 External Variables and Scope......................................................................................31
Chapter 2 - Types, Operators and Expressions........................................................................35
2.1 Variable Names..............................................................................................................35
2.2 Data Types and Sizes.....................................................................................................35
2.3 Constants........................................................................................................................36
2.4 Declarations....................................................................................................................39
2.5 Arithmetic Operators......................................................................................................40
2.6 Relational and Logical Operators...................................................................................40
2.7 Type Conversions...........................................................................................................41
2.8 Increment and Decrement Operators..............................................................................44
2.9 Bitwise Operators...........................................................................................................46
2.10 Assignment Operators and Expressions.......................................................................47
2.11 Conditional Expressions...............................................................................................49
2.12 Precedence and Order of Evaluation............................................................................49
Chapter 3 - Control Flow.........................................................................................................52
3.1 Statements and Blocks...................................................................................................52
3.2 If-Else.............................................................................................................................52
3.3 Else-If.............................................................................................................................53
3.4 Switch.............................................................................................................................54
3.5 Loops - While and For...................................................................................................56
3.6 Loops - Do-While...........................................................................................................58
3.7 Break and Continue........................................................................................................59
3.8 Goto and labels...............................................................................................................60
Chapter 4 - Functions and Program Structure..........................................................................62
4.1 Basics of Functions........................................................................................................62
4.2 Functions Returning Non-integers.................................................................................65
4.3 External Variables..........................................................................................................67
4.4 Scope Rules....................................................................................................................72
4.5 Header Files....................................................................................................................73
4.6 Static Variables..............................................................................................................75
4.7 Register Variables..........................................................................................................75
4.8 Block Structure...............................................................................................................76
4.9 Initialization...................................................................................................................76
4.10 Recursion......................................................................................................................78
4.11 The C Preprocessor......................................................................................................79
4.11.1 File Inclusion.........................................................................................................79
4.11.2 Macro Substitution................................................................................................80
4.11.3 Conditional Inclusion............................................................................................82
Chapter 5 - Pointers and Arrays...............................................................................................83
5.1 Pointers and Addresses...................................................................................................83
5.2 Pointers and Function Arguments..................................................................................84
5.3 Pointers and Arrays........................................................................................................87
5.4 Address Arithmetic........................................................................................................90
5.5 Character Pointers and Functions...................................................................................93
5.6 Pointer Arrays; Pointers to Pointers...............................................................................96
5.7 Multi-dimensional Arrays..............................................................................................99
5.8 Initialization of Pointer Arrays.....................................................................................101
5.9 Pointers vs. Multi-dimensional Arrays.........................................................................101
5.10 Command-line Arguments.........................................................................................102
5.11 Pointers to Functions..................................................................................................106
5.12 Complicated Declarations..........................................................................................108
Chapter 6 - Structures.............................................................................................................114
6.1 Basics of Structures......................................................................................................114
6.2 Structures and Functions..............................................................................................116
6.3 Arrays of Structures.....................................................................................................118
6.4 Pointers to Structures...................................................................................................122
6.5 Self-referential Structures............................................................................................124
6.6 Table Lookup...............................................................................................................127
6.7 Typedef.........................................................................................................................129
6.8 Unions..........................................................................................................................131
6.9 Bit-fields.......................................................................................................................132
Chapter 7 - Input and Output..................................................................................................135
7.1 Standard Input and Output...........................................................................................135
7.2 Formatted Output - printf.............................................................................................137
7.3 Variable-length Argument Lists...................................................................................138
7.4 Formatted Input - Scanf................................................................................................140
7.5 File Access...................................................................................................................142
7.6 Error Handling - Stderr and Exit..................................................................................145
7.7 Line Input and Output..................................................................................................146
7.8 Miscellaneous Functions..............................................................................................147
7.8.1 String Operations...................................................................................................147
7.8.2 Character Class Testing and Conversion..............................................................148
7.8.3 Ungetc...................................................................................................................148
7.8.4 Command Execution.............................................................................................148
7.8.5 Storage Management.............................................................................................148
7.8.6 Mathematical Functions........................................................................................149
7.8.7 Random Number generation.................................................................................149
Chapter 8 - The UNIX System Interface................................................................................151
8.1 File Descriptors............................................................................................................151
8.2 Low Level I/O - Read and Write..................................................................................152
8.3 Open, Creat, Close, Unlink..........................................................................................153
8.4 Random Access - Lseek...............................................................................................155
8.5 Example - An implementation of Fopen and Getc.......................................................156
8.6 Example - Listing Directories......................................................................................159
8.7 Example - A Storage Allocator....................................................................................163