Preface 1.Introduction Pointers and Memory Why You Should Become Proficient with Pointers Declaring Pointers How to Read a Declaration Address of Operator Displaying Pointer Values Dereferencing a Pointer Using the Indirection Operator Pointers to Functions The Concept of Null Pointer Size and Types Memory Models Predefined Pointer—Related Types Pointer Operators Pointer Arithmetic Comparing Pointers Common Uses of Pointers Multiple Levels of Indirection Constants and Pointers Summary 2.Dynamic Memory Management in C Dynamic Memory Allocation Memory Leaks Dynamic Memory Allocation Functions Using the malloc Function Using the calloc Function Using the realloc Function The alloca Function and Variable Length Arrays Deallocating Memory Using the free Function Assigning NULL to a Freed Pointer Double Free The Heap and System Memory Freeing Memory upon Program Termination Dangling Pointers Dangling Pointer Examples Dealing with Dangling Pointers Debug Version Support for Detecting Memory Leaks Dynamic Memory Allocation Technologies Garbage Collection in C Resource Acquisition Is Initialization Using Exception Handlers Summary 3.Pointers and Functions Program Stack and Heap Program Stack Organization of a Stack Frame Passing and Returning by Pointer Passing Data Using a Pointer Passing Data by Value Passing a Pointer to a Constant Returning a Pointer Pointers to Local Data Passing Null Pointers Passing a Pointer to a Pointer Function Pointers Declaring Function Pointers Using a Function Pointer Passing Function Pointers Returning Function Pointers Using an Array of Function Pointers Comparing Function Pointers Casting Function Pointers Summary 4.Pointers and Arrays Quick Review of Arrays One—Dimensional Arrays Two—Dimensional Arrays Multidimensional Arrays Pointer Notation and Arrays Differences Between Arrays and Pointers Using malloc to Create a One—Dimensional Array Using the realloc Function to Resize an Array Passing a One—Dimensional Array Using Array Notation Using Pointer Notation Using a One—Dimensional Array of Pointers Pointers and Multidimensional Arrays Passing a Multidimensional Array Dynamically Allocating a Two—Dimensional Array Allocating Potentially Noncontiguous Memory Allocating Contiguous Memory Jagged Arrays and Pointers Summary 5.Pointers and Strings String Fundamentals String Declaration The String Literal Pool String Initialization Standard String Operations Comparing Strings Copying Strings Concatenating Strings Passing Strings Passing a Simple String Passing a Pointer to a Constant char Passing a String to Be Initialized Passing Arguments to an Application Returning Strings Returning the Address of a Literal Returning the Address of Dynamically Allocated Memory Function Pointers and Strings Summary 6.Pointers and Structures Introduction How Memory Is Allocated for a Structure Structure Deallocation Issues Avoiding malloc/free Overhead Using Pointers to Support Data Structures Single—Linked List Using Pointers to Support a Queue Using Pointers to Support a Stack Using Pointers to Support a Tree Summary 7.Security Issues and the Improper Use of Pointers Pointer Declaration and Initialization Improper Pointer Declaration Failure to Initialize a Pointer Before It Is Used Dealing with Uninitialized Pointers Pointer Usage Issues Test for NULL Misuse of the Dereference Operator Dangling Pointers Accessing Memory Outside the Bounds of an Array Calculating the Array Size Incorrectly Misusing the sizeof Operator Always Match Pointer Types Bounded Pointers String Security Issues Pointer Arithmetic and Structures Function Pointer Issues Memory Deallocation Issues Double Free Clearing Sensitive Data Using Static Analysis Tools Summary 8.Odds and Ends Casting Pointers Accessing a Special Purpose Address Accessing a Port Accessing Memory using DMA Determining the Endianness of a Machine Aliasing, Strict Aliasing, and the restrict Keyword Using a Union to Represent a Value in Multiple Ways Strict Aliasing Using the restrict Keyword Threads and Pointers Sharing Pointers Between Threads Using Function Pointers to Support Callbacks Object—Oriented Techniques Creating and Using an Opaque Pointer Polymorphism in C Summary Index
名称: 嗨翻C语言(英文) 作者信息: 作者: David Griffiths [ 英文 pdf ]
简单介绍
Ever wished you could learn C from a book? Head First C provides a complete learning experience for C and structured imperative programming. With a unique method that goes beyond syntax and how-to manuals, this guide not only teaches you the language, it helps you understand how to be a great programmer. You’ll learn key areas such as language basics, pointers and pointer arithmetic, and dynamic memory management. Advanced topics include multi-threading and network programming - topics typically covered on a college-level course. This book also features labs: in-depth projects intended to stretch your abilities, test your new skills, and build confidence. Head First C mimics the style of college-level C courses, making it ideal as an accessible textbook for students. We think your time is too valuable to waste struggling with new concepts. Using the latest research in cognitive science and learning theory to craft a multi-sensory learning experience, Head First C uses a visually rich format designed for the way your brain works, not a text-heavy approach that puts you to sleep.
Head First C Dedication Advance Praise for Head First C Praise for other Head First books Authors of Head First C How to use this Book: Intro Who is this book for? We know what you’re thinking We know what your brain is thinking Metacognition: thinking about thinking Here’s what WE did Here’s what YOU can do to bend your brain into submission Read me The technical review team Acknowledgments Safari® Books Online 1. Getting Started with C: Diving in C is a language for small, fast programs But what does a complete C program look like? But how do you run the program? Two types of command Here’s the code so far Card counting? In C? There’s more to booleans than equals… What’s the code like now? Pulling the ol’ switcheroo Sometimes once is not enough… Loops often follow the same structure… You use break to break out… Your C Toolbox 2. Memory and Pointers: What are you pointing at? C code includes pointers Digging into memory Set sail with pointers Set sail sou’east, Cap’n Try passing a pointer to the variable Using memory pointers How do you pass a string to a function? Array variables are like pointers… What the computer thinks when it runs your code But array variables aren’t quite pointers Why arrays really start at 0 Why pointers have types Using pointers for data entry Be careful with scanf() fgets() is an alternative to scanf() Anyone for three-card monte? Oops…there’s a memory problem… String literals can never be updated If you’re going to change a string, make a copy Memory memorizer Your C Toolbox 2.5. Strings: String theory Desperately seeking Susan Frank Create an array of arrays Find strings containing the search text Using the strstr() function It’s time for a code review Array of arrays vs. array of pointers Your C Toolbox View Sample 3. Creating Small Tools: Do one thing and do it well View Sample Small tools can solve big problems View Sample Here’s how the program should work View Sample But you’re not using files… View Sample You can use redirection View Sample You can redirect the Standard Input with <… View Sample …and redirect the Standard Output with > View Sample But there’s a problem with some of the data… View Sample Introducing the Standard Error View Sample By default, the Standard Error is sent to the display View Sample fprintf() prints to a data stream View Sample Let’s update the code to use fprintf() View Sample Small tools are flexible View Sample Don’t change the geo2json tool View Sample A different task needs a different tool View Sample Connect your input and output with a pipe View Sample The bermuda tool View Sample But what if you want to output to more than one file? View Sample Roll your own data streams View Sample There’s more to main() View Sample Overheard at the Head First Pizzeria View Sample Let the library do the work for you View Sample Your C Toolbox 4. Using Multiple Source Files: Break it down, build it up Don’t put something big into something small Use casting to put floats into whole numbers Oh no…it’s the out-of-work actors… Let’s see what’s happened to the code Compilers don’t like surprises Split the declaration from the definition Creating your first header file If you have common features… You can split the code into separate files Compilation behind the scenes The shared code needs its own header file It’s not rocket science…or is it? Don’t recompile every file First, compile the source into object files It’s hard to keep track of the files Automate your builds with the make tool How make works Tell make about your code with a makefile Your C Toolbox C Lab 1: Arduino 5. Structs, Unions, and Bitfields: Roll your own structures Sometimes you need to hand around a lot of data Cubicle conversation Create your own structured data types with a struct Just give them the fish Read a struct’s fields with the “.” operator Can you put one struct inside another? How do you update a struct? The code is cloning the turtle You need a pointer to the struct (t).age vs. t.age Sometimes the same type of thing needs different types of data A union lets you reuse memory space How do you use a union? An enum variable stores a symbol Sometimes you want control at the bit level Bitfields store a custom number of bits Your C Toolbox 6. Data Structures and Dynamic Memory: Building bridges Do you need flexible storage? Linked lists are like chains of data Linked lists allow inserts Create a recursive structure Create islands in C… Inserting values into the list Use the heap for dynamic storage Give the memory back when you’re done Ask for memory with malloc()… Oh, no! It’s the out-of-work actors… Let’s fix the code using the strdup() function Free the memory when you’re done Exhibit A: the source code An overview of the SPIES system Software forensics: using valgrind Use valgrind repeatedly to gather more evidence Look at the evidence The fix on trial Your C Toolbox 7. Advanced Functions: Turn your functions up to 11 Looking for Mr. Right… Pass code to a function You need to tell find() the name of a function Every function name is a pointer to the function… …but there’s no function data type How to create function pointers Get it sorted with the C Standard Library Use function pointers to set the order Automating the Dear John letters Create an array of function pointers Make your functions streeeeeetchy Your C Toolbox 8. Static and Dynamic Libraries: Hot-swappable code Code you can take to the bank Angle brackets are for standard headers But what if you want to share code? Sharing .h header files Share .o object files by using the full pathname An archive contains .o files Create an archive with the ar command… Finally, compile your other programs The Head First Gym is going global Calculating calories But things are a bit more complex… Programs are made out of lots of pieces… Dynamic linking happens at runtime Can you link .a at runtime? First, create an object file What you call your dynamic library depends on your platform Your C Toolbox C Lab 2: OpenCV 9. Processes and System Calls: Breaking boundaries System calls are your hotline to the OS Then someone busted into the system… Security’s not the only problem The exec() functions give you more control There are many exec() functions The array functions: execv(), execvp(), execve() Passing environment variables Most system calls go wrong in the same way Read the news with RSS exec() is the end of the line for your program Running a child process with fork() + exec() Your C Toolbox 10. Interprocess Communication: It’s good to talk Redirecting input and output A look inside a typical process Redirection just replaces data streams fileno() tells you the descriptor Sometimes you need to wait… Stay in touch with your child Connect your processes with pipes Case study: opening stories in a browser In the child In the parent Opening a web page in a browser The death of a process Catching signals and running your own code sigactions are registered with sigaction() Rewriting the code to use a signal handler Use kill to send signals Sending your code a wake-up call Your C Toolbox 11. Sockets and Networking: There’s no place like 127.0.0.1 The Internet knock-knock server Knock-knock server overview BLAB: how servers talk to the Internet A socket’s not your typical data stream Sometimes the server doesn’t start properly Why your mom always told you to check for errors Reading from the client The server can only talk to one person at a time You can fork() a process for each client Writing a web client Clients are in charge Create a socket for an IP address getaddrinfo() gets addresses for domains Your C Toolbox 12. Threads: It’s a parallel world Tasks are sequential…or not… …and processes are not always the answer Simple processes do one thing at a time Employ extra staff: use threads How do you create threads? Create threads with pthread_create The code is not thread-safe You need to add traffic signals Use a mutex as a traffic signal Your C Toolbox C Lab 3: Blasteroids A. Leftovers: The top ten things (we didn’t cover) 1. Operators 2. Preprocessor directives 3. The static keyword 4. How big stuff is 5. Automated testing 6. More on gcc 7. More on make 8. Development tools 9. Creating GUIs 10. Reference material B. C Topics: Revision roundup Basics Pointers and memory Strings Data streams Data types Multiple files Structs Unions and bitfields Data structures Dynamic memory Advanced functions Static and dynamic libraries Processes and communication Sockets and networking Threads Index About the Authors Copyright