1 Review of Class on Oct. 28. 2 Outline  Pointer  Pointers to void  Call-by-Reference  Basic Scope Rules  Storage Classes  Default Initialization.

Slides:



Advertisements
Similar presentations
Etter/Ingber Engineering Problem Solving with C Fundamental Concepts Chapter 4 Modular Programming with Functions.
Advertisements

1 Storage Duration and Scope –Local and global variables Storage classes –automatic, static, external, register Todays Material.
C++ Programming: Program Design Including Data Structures, Third Edition Chapter 7: User-Defined Functions II.
C++ Programming: From Problem Analysis to Program Design, Third Edition Chapter 7: User-Defined Functions II.
Chapter 7: User-Defined Functions II
C++ Programming: Program Design Including Data Structures, Third Edition Chapter 7: User-Defined Functions II.
Chapter 7: User-Defined Functions II Instructor: Mohammad Mojaddam.
Kernighan/Ritchie: Kelley/Pohl:
1 Pointers. 2 Why Pointers They provide the means by which functions can modify arguments in the calling function. They support dynamic memory allocation.
1 Chapter 9 Arrays and Pointers. 2  One-dimensional arrays  The Relationship between Arrays and Pointers  Pointer Arithmetic and Element Size  Passing.
Chapter 6. 2 Objectives You should be able to describe: Function and Parameter Declarations Returning a Single Value Pass by Reference Variable Scope.
1 Functions and Structured Programming. 2 Structured Programming Structured programming is a problem-solving strategy and a programming methodology. –The.
1 Chapter 4 (II) Functions and Structured Programming.
C Lecture Notes Functions (Cont...). C Lecture Notes 5.8Calling Functions: Call by Value and Call by Reference Used when invoking functions Call by value.
1 Chapter 8 Functions, Pointers, and Storage Classes  Pointer  Pointers to void  Call-by-Reference  Basic Scope Rules  Storage Classes  Default Initialization.
1 Review of Chapter 6: The Fundamental Data Types.
1 Functions Modules: functions and classes Programs use new and “prepackaged” modules –New: programmer-defined functions, classes –Prepackaged: from the.
1 COMP 2130 Introduction to Computer Systems Computing Science Thompson Rivers University.
C++ for Engineers and Scientists Third Edition
1 Chapter 9 Scope, Lifetime, and More on Functions.
Operator Precedence First the contents of all parentheses are evaluated beginning with the innermost set of parenthesis. Second all multiplications, divisions,
C Functions Programmer-defined functions – Functions written by the programmer to define specific tasks. Functions are invoked by a function call. The.
18-2 Understand “Scope” of an Identifier Know the Storage Classes of variables and functions Related Chapter: ABC 5.10, 5.11.
Chapter 6: Modularity Using Functions. In this chapter, you will learn about: – Function and parameter declarations – Returning a single value – Returning.
MAHENDRAN CHAPTER 6. Session Objectives Explain Type of Functions Discuss category of Functions Declaration & Prototypes Explain User Defined Functions.
C++ for Engineers and Scientists Second Edition Chapter 6 Modularity Using Functions.
Senem Kumova Metin // CS115 // FUNCTIONS continues CHAPTER 5.
C++ Programming: From Problem Analysis to Program Design, Fifth Edition, Fifth Edition Chapter 7: User-Defined Functions II.
Functions Kernighan/Ritchie: Kelley/Pohl: Chapter 4 Chapter 5.
PASSING VALUE TO A FUNCTION # CALL BY VALUECALL BY VALUE # CALL BY REFERENCECALL BY REFERENCE STORAGE CLASS # AUTOAUTO # EXTERNALEXTERNAL # STATICSTATIC.
Chapter 11: Pointers Copyright © 2008 W. W. Norton & Company. All rights reserved. 1 Chapter 11 Pointers.
User Defined Functions Chapter 7 2 Chapter Topics Void Functions Without Parameters Void Functions With Parameters Reference Parameters Value and Reference.
1 Announcements Note from admins: Edit.cshrc.solaris instead of.tcshrc Note from admins: Do not use delta.ece.
 2007 Pearson Education, Inc. All rights reserved Random Number Generation  rand function – Load – Returns "random" number between
C++ Programming Lecture 11 Functions – Part III By Ghada Al-Mashaqbeh The Hashemite University Computer Engineering Department.
ECE 103 Engineering Programming Chapter 36 C Storage Classes Herbert G. Mayer, PSU CS Status 8/4/2014 Initial content copied verbatim from ECE 103 material.
Dale Roberts CSCI 230 Functions Scope, Parameter Passing, Storage Specifiers Department of Computer and Information Science, School of Science, IUPUI Dale.
FUNCTIONS. Funtions  The heart of effective problem solving is problem decomposition.  breaking a problem into small, manageable pieces  In C, the.
EPSII 59:006 Spring Call-by-value example #include void increment(int); //prototype for increment function int main(void) { int a=1; printf("Value.
Functions Illustration of: Pass by value, reference Scope Allocation Reference: See your CS115/215 textbook.
Functions. Flow of Control Review while for do while goto break & continue switch Relational operators short circuits.
Pointers1 WHAT IS A POINTER? Simply stated, a pointer is an address. A running program consists of three parts: execution stack, code, and data. They are.
 2000 Prentice Hall, Inc. All rights reserved Introduction Divide and conquer –Construct a program from smaller pieces or components –Each piece.
Chapter 7 - Functions. Functions u Code group that performs single task u Specification refers to what goes into and out of function u Design refers to.
1 This week Basics of functions Stack frames Stack vs. Heap (brief intro) Calling conventions Storage classes vs. scope Library functions Overloading.
Dynamic memory allocation and Intraprogram Communication.
C Part 2 Computer Organization I 1 August 2009 © McQuain, Feng & Ribbens The Three Attributes of an Identifier Identifiers have three essential.
C Programming Lecture 8 Call by Reference Scope. Call-by-Reference b For a C function to “effect” (read as “imitate”) call-by- reference: Pointers must.
Eine By: Avinash Reddy 09/29/2016.
Chapter 7: User-Defined Functions II
C Functions -Continue…-.
Friend Class Friend Class A friend class can access private and protected members of other class in which it is declared as friend. It is sometimes useful.
COM S 326X Deep C Programming for the 21st Century Prof. Rozier
The Three Attributes of an Identifier
Functions.
Pointers.
Instructor: Ioannis A. Vetsikas
User-Defined Functions
Dynamic memory allocation and Intraprogram Communication
C++ for Engineers and Scientists Second Edition
Scope, Parameter Passing, Storage Specifiers
Lecture 18 Arrays and Pointer Arithmetic
Classes and Objects.
C Storage classes.
Chapter 7: User-Defined Functions II
Scope Rules Of Variables
Submitted By : Veenu Saini Lecturer (IT)
C Programming Lecture-17 Storage Classes
Functions.
Presentation transcript:

1 Review of Class on Oct. 28

2 Outline  Pointer  Pointers to void  Call-by-Reference  Basic Scope Rules  Storage Classes  Default Initialization  Function Declarations and Definitions  The Type Qualifiers const and volatile

3 Pointer  Pointers:  Pointer variables can be declared in programs and then used to take addresses as values Declaration odouble *pb, x; Assignment opb = &x; Dereferencing oAccess the value of the variable to which the pointer points by dereference operator *:  *pb = 3;  What is the value of x? *pointer pointer = address; DataType *pointer1, *pointer2;

4 Pointer  Pointers:  What is the legal range of values of any pointer? a set of positive integers that are interpreted as machine addresses on a particular C system, and the special address NULL, 0 ostdio.h: #define NULL 0 oNULL can be used to represent false while(NULL) printf(“loop\n”);

5 Pointer #include int main(void){ int a =1,b =2; int *pa, *pb; pa = &a; pb = &b; printf("value of b: %d \n", *pb); *pb=3; printf("Input an integer: "); scanf("%d", pa); }  Declaration of a pointer: DataType *pointer;  Assign address to a pointer: pointer = address;  Access the value of the variable to which the pointer points: *pointer

6 Outline  Pointer  Pointers to void  Call-by-Reference  Basic Scope Rules  Storage Classes  Default Initialization  Function Declarations and Definitions  The Type Qualifiers const and volatile

7 Call-by-Reference  Call-by-value  Function Invocation fun_name(exp1, exp2);  All arguments are passed call-by-value Each argument is evaluated, and its value is used locally in place of the corresponding formal parameter. If a variable is passed to a function, the stored value of that variable in the calling environment is not changed.

8 Call-by-Reference #include void swap(int, int); int main(void){ int a=3, b=7; swap(a,b); printf("main: %d %d\n", a, b); return 0; } void swap(int sa, int sb){ int tmp; tmp = sa; sa = sb; sb = tmp; printf("swap: %d %d\n", sa, sb); } % a.out swap: 7 3 main: 3 7 Memory a b 7 3 swap: sa swap: sb swap: tmp

9 Call-by-Reference #include void swap(int*, int* ); int main(void){ int a=3, b=7; printf("Addr %u, %u\n", &a,&b); swap(&a,&b); printf("main: %d %d\n", a, b); return 0; } void swap(int *pa, int *pb){ int tmp; tmp = *pa; *pa = *pb; *pb = tmp; printf("swap: %d %d\n", *pa, *pb); } % a.out Addr , swap: 7 3 main: 7 3 Memory a b 7 3 swap: pa swap: pb swap: tmp

10 Call-by-Reference #include void swap(int*, int* ); int main(void){ int a=3, b=7; printf("Addr %u, %u\n", &a,&b); swap(&a,&b); printf("main: %d %d\n", a, b); return 0; } void swap(int *a, int *b){ int tmp; tmp = *a; *a = *b; *b = tmp; printf("swap: %d %d\n", *a, *b); } How to modify the values of the variables referred to in the argument list?  Declaring a function parameter to be a pointer  Using the pointer in the function body  Passing an address as an argument when the function is called

11 End of Review

12 Class on Nov 2

13 Outline  Pointer  Pointers to void  Call-by-Reference  Basic Scope Rules  Storage Classes  Default Initialization  Function Declarations and Definitions  The Type Qualifiers const and volatile

14 Pointers to void  In ANSI C, one pointer can be assigned to another only when  they both have the same type,  or when one of them is of type pointer to void void * can be considered as a generic pointer type  NULL can be assigned to any pointer.  Example: int *p; double *q; void *v; p = 0; p = NULL; p = (int *) 1; p = v = (int *) q; p = q; p =1; /* legal */ /* illegal */

15 Outline  Pointer  Pointers to void  Call-by-Reference  Basic Scope Rules  Storage Classes  Default Initialization  Function Declarations and Definitions  The Type Qualifiers const and volatile

16 Given a variable,  Date type set aside an appropriate amount of memory instruct the machine to perform specified operations correctly.  Where can we use this variable in the code? The scope of the variable  During the program execution, when is the memory allocated to the variable and when is the memory released? The lifetime of the variable Storage Class

17 Outline  Pointer  Pointers to void  Call-by-Reference  Basic Scope Rules  Storage Classes  Default Initialization  Function Declarations and Definitions  The Type Qualifiers const and volatile

18 Scope Rules include int f(int n); int main(void){ int i; for (i=1; i<=8; i++) printf("sum of 1 to %d = %d\n",i, f(i)); } /* calculate …..+n */ int f(int n){ int i, sum=0; for (i=0; i<=n; i++) sum += i; return sum; } Example print out the results of the following expressions:  1  1+2       Can we have two variables with the same name i? the scope of an identifier

19 Scope Rules  What is the scope of an identifier?  The part of the code in which the identifier is accessible. include int f(int n); int main(void){ int i; for (i=1; i<=8; i++) printf("sum of 1 to %d = %d\n",i, f(i)); } int f(int n){ int i, sum=0; for (i=0; i<=n; i++) sum += i; return sum; }

20 Scope Rules  How to decide the scope of a given identifier?  This concept depends on the notion of a block, which is a compound statement with declarations.

21 Scope Rules include int f(int n); int main(void) { int i; for (i=1; i<=8; i++) printf("sum of 1 to %d = %d\n",i, f(i)); } int f(int n) { int i, sum=0; for (i=0; i<=n; i++) sum += i; return sum; } The body of function definition can be considered as a block.

22 Scope Rules  How to decide the scope of a given identifier?  This concept depends on the notion of a block, which is a compound statement with declarations.  Identifiers are accessible only within the block in which they are declared.  They are unknown outside the boundaries of that block.

23 Scope Rules include int f(int n); int main(void) { int i; for (i=1; i<=8; i++) printf("sum of 1 to %d = %d\n",i, f(i)); } int f(int n) { int i, sum=0; for (i=0; i<=n; i++) sum += i; return sum; } The i declared in function main is unknown  only one variable with name i is accessible The i declared in function f is unknown  only one variable with name i is accessible Variables are unknown outside the block in which they are declared.

24 Scope Rules #include int main(void){ { int b =1; printf("%d\n", b); } printf("%d\n", b); return 0; } Identifiers are accessible only within the block in which they are declared. % gcc scope3.c scope3.c: In function `main': scope3.c:7: error: `b' undeclared (first use in this function) scope3.c:7: error: (Each undeclared identifier is reported only once scope3.c:7: error: for each function it appears in.)

25 Scope Rules #include int main(void){ int a = 2; int *p = &a; printf("%d\n", a); { int a= 7; printf("%d\n", a); printf("%d\n", *p); } printf("%d\n", ++a); return 0; } % a.out the inner block a hides the outer block a What if same identifier used in different declarations?

26 Scope Rules include int f(int n); int main(void) { int i; float i; for (i=1; i<=8; i++) printf("sum of 1 to %d = %d\n",i, f(i)); } int f(int n) { int i, sum=0; for (i=0; i<=n; i++) sum += i; return sum; } We cannot declare two variables with the same name in the same block. % gcc scope0.c scope0.c: In function `main': scope0.c:5: error: conflicting types for `i' scope0.c:4: error: previous declaration of `i' %

27 Scope Rules  Summary  The scope of an identifier The part of the code in which the identifier is accessible. This concept depends on the notion of a block, which is a compound statement with declarations.  The basic rule of scoping Identifiers are accessible only within the block in which they are declared. They are unknown outside the boundaries of that block. It is not allowed to declare more than one variable with the same name within a block.

28 Outline  Pointer  Pointers to void  Call-by-Reference  Basic Scope Rules  Storage Classes  Default Initialization  Function Declarations and Definitions  The Type Qualifiers const and volatile

29 Given a variable,  Date type Set aside an appropriate amount of memory Performance correct instructions for operations on the variable  Where can we use this variable in the code? The scope of the variable  During the program execution, when is the memory allocated to the variable and when is the memory released? The lifetime of the variable Storage Class

30 Storage Classes  What is an identifier’s storage class?  An important attribute of an identifier, scope of the code where it is accessible time span that it exists in memory during program execution  Storage Classes: automatic, external, register, static, and static external oDeclaration oscope oLife span

31  Pointer  Pointers to void  Call-by-Reference  Scope Rules  Storage Classes  Default Initialization  Function Declarations and Definitions  The Type Qualifiers const and volatile Outline Automatic External Register Static Static external

32 Storage Classes — auto  How to declare an automatic variable?  Block: A compound statement with declarations  By default, variables declared within blocks are of storage class automatic.  The keyword auto can be used to explicitly specify the storage class

33 include int f(int n); int main(void) { int i; for (i=1; i<=8; i++) printf("sum of 1 to %d = %d\n",i, f(i)); } int f(int n) { int i, sum=0; for (i=0; i<=n; i++) sum += i; return sum; } Storage Classes — auto

34 Storage Classes — auto  Scope:  The block in which it is declared  Time span:  When a block is entered, the system allocates memory for the automatic variables.  Within that block, these variables are defined and are considered local to the block  When the block is exited, the system releases the memory that was set aside for the automatic variables. The values of these variables are lost  If the block is reentered, the system once again allocates memory, but previous values are lost.

35 Storage Classes DeclarationScopeLife span Autowithin a block block in which it is declared Memory is allocated when the block is entered and released when the block is exited ExternOutside a function All the functions declared after it The whole execution (Storage is permanently assigned) Register(register) within a block Block in which it is declared Memory is allocated when the block is entered and released when the block is exited Static(static) within a block Block in which it is declared The whole execution (Storage is permanently assigned) Static extern (static) Outside a function The remainder of the file in which it is declared The whole execution (Storage is permanently assigned)

36  Pointer  Pointers to void  Call-by-Reference  Scope Rules  Storage Classes  Default Initialization  Function Declarations and Definitions  The Type Qualifiers const and volatile Outline Auto External Register Static Static external

37 Storage Classes — extern  extern variable  a variable’s storage class is extern if it is declared outside a function  Keyword extern int a=1, b=2, c=3; is equivalent to extern int a=1, b=2, c=3; #include int a=1, b=2, c=3; int f(void); int main(void){ a = b = c = 4; printf("%3d\n", f()); return 0; } int f(void){ return (a+b+c); }

38 Storage Classes — extern  Scope:  Global to all functions declared after it.  life span of extern variable  Storage is permanently assigned to it  Upon exit from the block or function, the external variables retain their values.  Why external variables?  They can be used to transmit values across functions

39 Storage Classes — extern #include int a=1, b=2, c=3; int f(void); int main(void){ printf("%3d\n", f()); printf("%3d%3d%3d\n", a, b, c); return 0; } int f(void){ a = b = c = 4; return (a+b+c); } % a.out The external variables retain their values across block and function exit.

40 Storage Classes — extern #include int a=1, b=2, c=3; int f(void); int main(void){ printf("%3d\n", f()); printf("%3d%3d%3d\n", a, b, c); return 0; } int f(void){ int b, c; a = b = c = 4; return (a+b+c); } % a.out They may be hidden if the identifier is redefined

41 Storage Classes — extern  external variables in large program  The ability to compile files separately is important when writing large program.  Question: When a file is compiled, how can the compiler gets the information of the external variables declared in other file?

42 Storage Classes — extern #include int a=1, b=2, c=3; int f(void); int main(void){ printf("%3d\n", f()); printf("%3d%3d%3d\n", a, b, c); return 0; } file1.c int f(void){ int b, c; a = b = c = 4; return (a+b+c); } file2.c When file2.c is compiled separately, how can the compiler gets the information of external variable a?

43 Storage Classes — extern #include int a=1, b=2, c=3; int f(void); int main(void){ printf("%3d\n", f()); printf("%3d%3d%3d\n", a, b, c); return 0; } file1.c int f(void){ int b, c; a = b = c = 4; return (a+b+c); } file2.c % gcc file1.c file2.c file2.c: In function `f': file2.c:3: error: `a' undeclared (first use in this function) file2.c:3: error: (Each undeclared identifier is reported only once file2.c:3: error: for each function it appears in.)

44 Storage Classes — extern #include int a=1, b=2, c=3; int f(void); int main(void){ printf("%3d\n", f()); printf("%3d%3d%3d\n", a, b, c); return 0; } file1.c int f(void){ extern int a; int b, c; a = b = c = 4; return (a+b+c); } file2.c The use of extern in file2.c tells the compiler that the variable a is defined elsewhere

45 Storage Classes DeclarationScopeLife span Autowithin a block block in which it is declared Memory is allocated when the block is entered and released when the block is exited ExternOutside a function All the functions declared after it The whole execution (Storage is permanently assigned) Register(register) within a block Block in which it is declared Memory is allocated when the block is entered and released when the block is exited Static(static) within a block Block in which it is declared The whole execution (Storage is permanently assigned) Static extern (static) Outside a function The remainder of the file in which it is declared The whole execution (Storage is permanently assigned)

46  Pointer  Pointers to void  Call-by-Reference  Scope Rules  Storage Classes  Default Initialization  Function Declarations and Definitions  The Type Qualifiers const and volatile Outline Auto Extern Register Static Static external

47 Storage Classes — register  How to declare register variables?  register int i;  Scope and life Span,  Same as automatic variables

48 Storage Classes — register  Features of register variables  Tells the compiler that the variables should be stored in high-speed memory registers, if possible.  Because resource limitations sometimes make this impossible, this storage class defaults to automatic whenever the compiler cannot allocate a register.  Purpose Improve execution speed

49 Storage Classes DeclarationScopeLife span Autowithin a block Block in which it is declared Memory is allocated when the block is entered and released when the block is exited ExternOutside a function All the functions declared after it The whole execution (Storage is permanently assigned) Register(register) within a block Block in which it is declared Memory is allocated when the block is entered and released when the block is exited Static(static) within a block Block in which it is declared The whole execution (Storage is permanently assigned) Static extern (static) Outside a function The remainder of the file in which it is declared The whole execution (Storage is permanently assigned)

50  Pointer  Pointers to void  Call-by-Reference  Scope Rules  Storage Classes  Default Initialization  Function Declarations and Definitions  The Type Qualifiers const and volatile Outline Auto Extern Register Static Static external

51 Storage Classes — static  static declarations  static int count;  Scope:  private to the block in which they are declared  Life Span: the whole time the program is executing  Allow a local variable to retain its previous values when the block is reentered. Contrast to automatic variables, which lose their value upon block exit.

52 #include int is_prime(int n){ int k, limit; if (n==2) return 1; if (n%2==0) return 0; limit = n/2; for (k=3; k<=limit; k+=2) if (n%k==0) return 0; return 1; } int increment_count(void){ static int count = 0; return (++count); } int main(void){ int i=0; printf("Primes less than 30:\n"); for(i=2; i<=30; i++) if (is_prime(i)) printf("prime %3d: %4d\n",increment_count(),i); } % a.out Primes less than 30: prime 1: 2 prime 2: 3 prime 3: 5 prime 4: 7 prime 5: 11 prime 6: 13 prime 7: 17 prime 8: 19 prime 9: 23 prime 10: 29 a static variable retains its previous values when the block is reentered.

53 Storage Classes DeclarationScopeLife span Autowithin a block Block in which it is declared Memory is allocated when the block is entered and released when the block is exited ExternOutside a function All the functions declared after it The whole execution (Storage is permanently assigned) Register(register) within a block Block in which it is declared Memory is allocated when the block is entered and released when the block is exited Static(static) within a block Block in which it is declared The whole execution (Storage is permanently assigned) Static extern (static) Outside a function The remainder of the file in which it is declared The whole execution (Storage is permanently assigned)

54  Pointer  Pointers to void  Call-by-Reference  Scope Rules  Storage Classes  Default Initialization  Function Declarations and Definitions  The Type Qualifiers const and volatile Outline Auto Extern Register Static Static external

55 #include “count.h” static int count = 0; int increment_count(void){ return (++count); } int get_count(void){ return count; } #include #include "count.h" int is_prime(int n){ …… } int main(void){ int i=0; for(i=2; get_count()<3000; i++) { if (is_prime(i)) increment_count(); if( i%1000 ==0 || get_count()==3000) printf("%8d %8d\n", i, get_count()); } se.c count.c Variable count in file count.c  accessible by increment_count() get_count()  Unknown outside of file count.c --- private to count.c int get_count(void); int increment_count(void); count.h gcc se.c count.c %a.out …… Use functions provided in count.c to keep track of the number of primes less than or equal to i.

56 Storage Classes — static external  How to declare static external variables?  keyword: static, declared outside a function  Example static int count = 0; int increment_count(void){ return (++count); } int get_count(void){ return count; }

57 Storage Classes — static external  Scope  the remainder of the source file in which they are declared  Life Span  Storage is permanently assigned.  values are retained #include “count.h” static int count = 0; int increment_count(void){ return (++count); } int get_count(void){ return count; }

58  Pointer  Pointers to void  Call-by-Reference  Scope Rules  Storage Classes  Default Initialization  Function Declarations and Definitions  The Type Qualifiers const and volatile Auto External Register Static Static external Outline

59 Storage Classes DeclarationScopeLife span Autowithin a block Block in which it is declared Memory is allocated when the block is entered and released when the block is exited ExternOutside a function All the functions declared after it The whole execution (Storage is permanently assigned) Register(register) within a block Block in which it is declared Memory is allocated when the block is entered and released when the block is exited Static(static) within a block Block in which it is declared The whole execution (Storage is permanently assigned) Static extern (static) Outside a function The remainder of the file in which it is declared The whole execution (Storage is permanently assigned)

60 Outline  Pointer  Pointers to void  Call-by-Reference  Scope Rules  Storage Classes  Default Initialization  Function Declarations and Definitions  The Type Qualifiers const and volatile

61 Default Initialization  Default Initialization  Both external variables and static variables that are not explicitly initialized by the programmer are initialized to zero by the system.

62 Default Initialization  Default Initialization  Automatic and register variables usually are not initialized by the system Start with garbage values. Although some C systems do initialize automatic variables to zero, this feature should not be relied on.

63 Default Initialization #include int i; void f(){ static int a; printf("%d\n", a); } int main(void){ int b; printf("%d\n", b); printf("%d\n", i); f(); } % a.out

64 Outline  Pointer  Pointers to void  Call-by-Reference  Scope Rules  Storage Classes  Default Initialization  Function Declarations and Definitions  The Type Qualifiers const and volatile

65 Outline  Pointer  Pointers to void  Call-by-Reference  Scope Rules  Storage Classes  Default Initialization  Function Declarations and Definitions  The Type Qualifiers const and volatile

66 End of Chapter 8 Read 8.1 – 8.14