![Page 1: Introduction to C - Cornell University · Introduction to C Program Structure Functions Arguments can be passed: by value: a copy of the parameter is passed into the function. by](https://reader035.vdocuments.site/reader035/viewer/2022070812/5f0be0047e708231d432a506/html5/thumbnails/1.jpg)
Introduction to C
Introduction to CGeared toward programmers
Zhiyuan Teo
Slide heritage: Alin Dobra → Niranjan Nagarajan → Owen Arden → RobertEscriva
Cornell CS 4411, August 26, 2011
![Page 2: Introduction to C - Cornell University · Introduction to C Program Structure Functions Arguments can be passed: by value: a copy of the parameter is passed into the function. by](https://reader035.vdocuments.site/reader035/viewer/2022070812/5f0be0047e708231d432a506/html5/thumbnails/2.jpg)
Introduction to C
1 Administrative Information
2 Why C?
3 A Quick Example
4 Programmer’s Responsibilities
5 Language BasicsPointers and Memory Management
6 Program Structure
![Page 3: Introduction to C - Cornell University · Introduction to C Program Structure Functions Arguments can be passed: by value: a copy of the parameter is passed into the function. by](https://reader035.vdocuments.site/reader035/viewer/2022070812/5f0be0047e708231d432a506/html5/thumbnails/3.jpg)
Introduction to C
Administrative Information
Administrative Information
Course StaffZhiyuan "Z" Teo (zteo@cs)Ki Suh Lee (kslee@cs)
Office Hours - 361 Upson HallMonday 3.20pm - 4.25pm (Zhiyuan)Wednesday 3.20pm - 4.25pm (Ki Suh)Immediately after lectureOr by appointment
Lectures will rotate between TAs.No independent course webpage, so check the 4410site for announcements.
![Page 4: Introduction to C - Cornell University · Introduction to C Program Structure Functions Arguments can be passed: by value: a copy of the parameter is passed into the function. by](https://reader035.vdocuments.site/reader035/viewer/2022070812/5f0be0047e708231d432a506/html5/thumbnails/4.jpg)
Introduction to C
Administrative Information
More Administrative Information
6 projects, 90% of your grade.per-project weightage not decided yet.10% of your grade from flexible components.
participation in class and discussionshelping TAs to identify errors...and lots of other opportunities
strictly 2 members per project team.member swaps are allowed between projects but inform thecourse staff firstinform course staff if you or your team mate decides to dropthe class
![Page 5: Introduction to C - Cornell University · Introduction to C Program Structure Functions Arguments can be passed: by value: a copy of the parameter is passed into the function. by](https://reader035.vdocuments.site/reader035/viewer/2022070812/5f0be0047e708231d432a506/html5/thumbnails/5.jpg)
Introduction to C
Administrative Information
Some advice
Start on projects early!If a problem is unclear or underdefined, seekclarification or make reasonable design assumptions.Don’t put off your questions if you have any.Don’t think of the class as ‘course staff vs students’;we are all here to learn, TAs included.
![Page 6: Introduction to C - Cornell University · Introduction to C Program Structure Functions Arguments can be passed: by value: a copy of the parameter is passed into the function. by](https://reader035.vdocuments.site/reader035/viewer/2022070812/5f0be0047e708231d432a506/html5/thumbnails/6.jpg)
Introduction to C
Why C?
Portability
Most operating systems have a C compiler available...... (partially) because most operating systems arewritten in C.
Linux, {Free,Open,Net,Dragonfly}BSD, Minix, XNU,Windows
![Page 7: Introduction to C - Cornell University · Introduction to C Program Structure Functions Arguments can be passed: by value: a copy of the parameter is passed into the function. by](https://reader035.vdocuments.site/reader035/viewer/2022070812/5f0be0047e708231d432a506/html5/thumbnails/7.jpg)
Introduction to C
Why C?
Predictability
No unintended memory allocations.Control of layout of structures in memory.Simple syntax makes determining behavior easy.
![Page 8: Introduction to C - Cornell University · Introduction to C Program Structure Functions Arguments can be passed: by value: a copy of the parameter is passed into the function. by](https://reader035.vdocuments.site/reader035/viewer/2022070812/5f0be0047e708231d432a506/html5/thumbnails/8.jpg)
Introduction to C
Why C?
Power
Direct, unprotected control over the system hardware.Complex data structure creation.Assembly is just a step away.
![Page 9: Introduction to C - Cornell University · Introduction to C Program Structure Functions Arguments can be passed: by value: a copy of the parameter is passed into the function. by](https://reader035.vdocuments.site/reader035/viewer/2022070812/5f0be0047e708231d432a506/html5/thumbnails/9.jpg)
Introduction to C
Why C?
But great power can corrupt... ∗
∗which will it be, the stack or the heap?
![Page 10: Introduction to C - Cornell University · Introduction to C Program Structure Functions Arguments can be passed: by value: a copy of the parameter is passed into the function. by](https://reader035.vdocuments.site/reader035/viewer/2022070812/5f0be0047e708231d432a506/html5/thumbnails/10.jpg)
Introduction to C
Why C?
Goals for today
Provide a quick primer for using/learning C.Warn you of pitfalls related to C programming.Practice reading/writing C.
![Page 11: Introduction to C - Cornell University · Introduction to C Program Structure Functions Arguments can be passed: by value: a copy of the parameter is passed into the function. by](https://reader035.vdocuments.site/reader035/viewer/2022070812/5f0be0047e708231d432a506/html5/thumbnails/11.jpg)
Introduction to C
A Quick Example
Hello World
#include <stdio.h>
int main(int argc, char* argv[]){
printf("Hello World!\n");
return 0;}
![Page 12: Introduction to C - Cornell University · Introduction to C Program Structure Functions Arguments can be passed: by value: a copy of the parameter is passed into the function. by](https://reader035.vdocuments.site/reader035/viewer/2022070812/5f0be0047e708231d432a506/html5/thumbnails/12.jpg)
Introduction to C
A Quick Example
Try it out
Create hello.c†.In a VS2008 command prompt run:
cl hello.c
Now run the hello.exe binary.If cl.exe complains about missing DLLs or libraryinclude paths, run vsvars32.bat first from thecommon7\tools folder in the VS2008 installationdirectory.
†or fetch it from the course webpage
![Page 13: Introduction to C - Cornell University · Introduction to C Program Structure Functions Arguments can be passed: by value: a copy of the parameter is passed into the function. by](https://reader035.vdocuments.site/reader035/viewer/2022070812/5f0be0047e708231d432a506/html5/thumbnails/13.jpg)
Introduction to C
A Quick Example
Learning a new language
Languages are largely the same.Notice the similarities.Control structures (loops, conditionals, etc.)Data types (int, char, classes, etc)
Embrace diversity.Play on a language’s strengths.Don’t use a square peg for a round hole.
![Page 14: Introduction to C - Cornell University · Introduction to C Program Structure Functions Arguments can be passed: by value: a copy of the parameter is passed into the function. by](https://reader035.vdocuments.site/reader035/viewer/2022070812/5f0be0047e708231d432a506/html5/thumbnails/14.jpg)
Introduction to C
Programmer’s Responsibilities
The Programmer’s Responsibilities
Memory maintenance (no automatic garbagecollection).Error handling (no exceptions thrown in C).
![Page 15: Introduction to C - Cornell University · Introduction to C Program Structure Functions Arguments can be passed: by value: a copy of the parameter is passed into the function. by](https://reader035.vdocuments.site/reader035/viewer/2022070812/5f0be0047e708231d432a506/html5/thumbnails/15.jpg)
Introduction to C
Language Basics
Language Basics
Control flowOperatorsData TypesPreprocessor
![Page 16: Introduction to C - Cornell University · Introduction to C Program Structure Functions Arguments can be passed: by value: a copy of the parameter is passed into the function. by](https://reader035.vdocuments.site/reader035/viewer/2022070812/5f0be0047e708231d432a506/html5/thumbnails/16.jpg)
Introduction to C
Language Basics
Control Flow
if (x) { } else if (y) { } else { }
for (pre(); loop_invariant(); post()) { }
while (x) { }
do { } while (x);
switch (x) { case 0: break; default: act(); }
![Page 17: Introduction to C - Cornell University · Introduction to C Program Structure Functions Arguments can be passed: by value: a copy of the parameter is passed into the function. by](https://reader035.vdocuments.site/reader035/viewer/2022070812/5f0be0047e708231d432a506/html5/thumbnails/17.jpg)
Introduction to C
Language Basics
Operators
Arithmetic: +, -, *, /, %Relational: <, >, <=, >=, ==, !=Logical: &&, ||, !, ?:Bitwise: &, |, ˆ, !, «, »
![Page 18: Introduction to C - Cornell University · Introduction to C Program Structure Functions Arguments can be passed: by value: a copy of the parameter is passed into the function. by](https://reader035.vdocuments.site/reader035/viewer/2022070812/5f0be0047e708231d432a506/html5/thumbnails/18.jpg)
Introduction to C
Language Basics
Primitives
Integer types:char : character, typically one byte.int, short, long : integers of different sizes.Optional prefixes signed or unsigned.
Floating point types:float : single-precision floating point.double : double-precision floating point.
No booleans:0⇒ false6= 0⇒ true
![Page 19: Introduction to C - Cornell University · Introduction to C Program Structure Functions Arguments can be passed: by value: a copy of the parameter is passed into the function. by](https://reader035.vdocuments.site/reader035/viewer/2022070812/5f0be0047e708231d432a506/html5/thumbnails/19.jpg)
Introduction to C
Language Basics
Sample Primitive Declarations
char a = ’A’;char b = 65;char c = 0x41;
int i = -2343234;
unsigned int ui = 4294967295;unsigned int uj = ((long) 1 << 32) - 1;unsigned int uk = -1;
float pi = 3.14;double long_pi = 0.31415e+1;
![Page 20: Introduction to C - Cornell University · Introduction to C Program Structure Functions Arguments can be passed: by value: a copy of the parameter is passed into the function. by](https://reader035.vdocuments.site/reader035/viewer/2022070812/5f0be0047e708231d432a506/html5/thumbnails/20.jpg)
Introduction to C
Language Basics
Enums
enum months{
JANUARY,FEBRUARY,MARCH
};
enum days{
SUNDAY,TUESDAY = 2,WEDNESDAY
};
Values are consecutiveintegers starting fromzero.Explicitly assigning avalue causes thesequence to continuefrom that value (e.g.,WEDNESDAY == 3).
![Page 21: Introduction to C - Cornell University · Introduction to C Program Structure Functions Arguments can be passed: by value: a copy of the parameter is passed into the function. by](https://reader035.vdocuments.site/reader035/viewer/2022070812/5f0be0047e708231d432a506/html5/thumbnails/21.jpg)
Introduction to C
Language Basics
Preprocessor
Inclusion of standard library files:#include <header.h>
Inclusion from local directory:#include "myfile.h"
Definition of constants:#define HOURS_PER_DAY 24
Creation of macros:#define CELSIUS(F) ((F - 32) * 5/9.)
![Page 22: Introduction to C - Cornell University · Introduction to C Program Structure Functions Arguments can be passed: by value: a copy of the parameter is passed into the function. by](https://reader035.vdocuments.site/reader035/viewer/2022070812/5f0be0047e708231d432a506/html5/thumbnails/22.jpg)
Introduction to C
Language Basics
Pointers and Memory Management
Pointers hold memory addresses
An int: int foo;
Pointer to an int: int* ptr_foo;
Pointer to a pointer to an int: int** ptr_foo;
![Page 23: Introduction to C - Cornell University · Introduction to C Program Structure Functions Arguments can be passed: by value: a copy of the parameter is passed into the function. by](https://reader035.vdocuments.site/reader035/viewer/2022070812/5f0be0047e708231d432a506/html5/thumbnails/23.jpg)
Introduction to C
Language Basics
Pointers and Memory Management
Pointer operations
Obtain the address of a variable: ‘&’Dereference a memory address: ‘*’
![Page 24: Introduction to C - Cornell University · Introduction to C Program Structure Functions Arguments can be passed: by value: a copy of the parameter is passed into the function. by](https://reader035.vdocuments.site/reader035/viewer/2022070812/5f0be0047e708231d432a506/html5/thumbnails/24.jpg)
Introduction to C
Language Basics
Pointers and Memory Management
Pointer Example
int x;int* ptr; /* ptr points to an
undefined location */
ptr = &x; /* ptr now points tointeger x */
*ptr = 3; /* integer pointed to byptr is now 3 */
![Page 25: Introduction to C - Cornell University · Introduction to C Program Structure Functions Arguments can be passed: by value: a copy of the parameter is passed into the function. by](https://reader035.vdocuments.site/reader035/viewer/2022070812/5f0be0047e708231d432a506/html5/thumbnails/25.jpg)
Introduction to C
Language Basics
Pointers and Memory Management
Global Variables
Declared outside all functions.Space allocated before execution.Space deallocated at program exit.Learn the meanings of static and extern (storageclass modifiers).
![Page 26: Introduction to C - Cornell University · Introduction to C Program Structure Functions Arguments can be passed: by value: a copy of the parameter is passed into the function. by](https://reader035.vdocuments.site/reader035/viewer/2022070812/5f0be0047e708231d432a506/html5/thumbnails/26.jpg)
Introduction to C
Language Basics
Pointers and Memory Management
Local Variables
Declared at the start of the function.Space is allocated on the stack.Initialized before function execution.Deallocated when leaving the function scope.
Also known as deleting the stack “frame”.
![Page 27: Introduction to C - Cornell University · Introduction to C Program Structure Functions Arguments can be passed: by value: a copy of the parameter is passed into the function. by](https://reader035.vdocuments.site/reader035/viewer/2022070812/5f0be0047e708231d432a506/html5/thumbnails/27.jpg)
Introduction to C
Language Basics
Pointers and Memory Management
Heap Variables
Allocate with malloc() and deallocate with free().void* malloc(int)void free(void*)
It is up to you to manage memory.Never calling free() leaks memory.Calling free() more than once will crash yourprogram. ‡
‡Known as a “double free” bug, and is sometimes exploitable.
![Page 28: Introduction to C - Cornell University · Introduction to C Program Structure Functions Arguments can be passed: by value: a copy of the parameter is passed into the function. by](https://reader035.vdocuments.site/reader035/viewer/2022070812/5f0be0047e708231d432a506/html5/thumbnails/28.jpg)
Introduction to C
Language Basics
Pointers and Memory Management
Malloc/Free Example
int* ptr; /* pointer to an int */
/* allocate space to hold an int */ptr = (int*) malloc(sizeof(int));
/* check if successful */if (ptr == NULL) exit(1);
*ptr = 4; /* store value 4 in the int */printf("ptr: %p %d\n", ptr, *ptr);
/* deallocate memory */free(ptr);
![Page 29: Introduction to C - Cornell University · Introduction to C Program Structure Functions Arguments can be passed: by value: a copy of the parameter is passed into the function. by](https://reader035.vdocuments.site/reader035/viewer/2022070812/5f0be0047e708231d432a506/html5/thumbnails/29.jpg)
Introduction to C
Language Basics
Pointers and Memory Management
Warning
Dereferencing an un-initialized pointer can crash yourprogram (or worse)!Consider initializing a pointer to NULL and checkingbefore dereferencing.Some functions return NULL on error.
Pay attention to the function specification!Check return values!
![Page 30: Introduction to C - Cornell University · Introduction to C Program Structure Functions Arguments can be passed: by value: a copy of the parameter is passed into the function. by](https://reader035.vdocuments.site/reader035/viewer/2022070812/5f0be0047e708231d432a506/html5/thumbnails/30.jpg)
Introduction to C
Language Basics
Pointers and Memory Management
Arrays and Strings
Arrays
for (i = 0; i < 10; ++i){
A[i] = i * i;}
Strings - null-terminated arrays!
char name[] = "CS4410";name[5] = ’1’;
Functions to operate on strings in string.h.strncpy, strncmp, strncat, strstr, strchr
![Page 31: Introduction to C - Cornell University · Introduction to C Program Structure Functions Arguments can be passed: by value: a copy of the parameter is passed into the function. by](https://reader035.vdocuments.site/reader035/viewer/2022070812/5f0be0047e708231d432a506/html5/thumbnails/31.jpg)
Introduction to C
Program Structure
Functions
Arguments can be passed:by value: a copy of the parameter is passed into thefunction.by reference: a pointer is passed into the function.
Return values are also by value or by reference.
![Page 32: Introduction to C - Cornell University · Introduction to C Program Structure Functions Arguments can be passed: by value: a copy of the parameter is passed into the function. by](https://reader035.vdocuments.site/reader035/viewer/2022070812/5f0be0047e708231d432a506/html5/thumbnails/32.jpg)
Introduction to C
Program Structure
Pass by Value
swap_value() only changes n1 and n2 within the localscope.
void swap_value(int n1, int n2){
int temp;temp = n1;n1 = n2;n2 = temp;
}
![Page 33: Introduction to C - Cornell University · Introduction to C Program Structure Functions Arguments can be passed: by value: a copy of the parameter is passed into the function. by](https://reader035.vdocuments.site/reader035/viewer/2022070812/5f0be0047e708231d432a506/html5/thumbnails/33.jpg)
Introduction to C
Program Structure
Pass by Reference
swap_reference() changes the values at the memorylocations pointed to by p1 and p2.
void swap_reference(int* p1, int* p2){
int temp;temp = *p1;
*p1 = *p2;
*p2 = temp;}