C 语言 Review

作者 QIFAN 日期 2017-02-27
C 语言 Review

Pointer

call by value VS call by reference

c is a call by value ,每次 call 方法,参数都会被复制一遍,所以如果直接传的是值,结果不会改变。

void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}

Pointer Arithmetic

int* A: A + i = A + 4 * i
用一个外部的 cast 来了避免混淆。
use ((char*)(A) + i) even if A is the type of char*

Referencing and Dereferencing

Referencing: 取地址,&y
Dereferencing : 取值, *x

Structs

一群值的集合

Casting

integer: signed 和 unsigned 的 bits 不变,只是重新计算值。
cast explicitly:
cast down :数据的被截断
cast up :upcasting and dereferencing pointer 可能造成指向未知 undefined 的内存

内存分配

malloc ,分配内存,但是没有初始化(值没有清空)
calloc ,分配内存并初始化值
free ,释放之前被分配的内存
malloc what you free, free what you want to malloc

typedef
给 pointer 起别名

Macro

#define MAX_VAL = 100
用来定义常数挺好的

Generic Type

void
不能 dereferencing void

Header Files *.h

头文件。放要引用的定义和 macro 都放进去。 #include *.h
不要

header guard
避免在一个文件 include 多次同一个头文件。

#ifndefine FATHER.h
#define FATHER.h