1. 关于const用法
const int a 和 int const a是一样的
const int *a 意味着a是指向一个常整型数的指针(也就是说整型数是不可修改的,但是指针可以)
int *const a 意思是a是一个指向整型数的常指针(也就是说指针指向的整型数是可以修改的,但是指针是不可以修改的)
int const *a const 意思是a是一个指向常整数的常指针(也就是说整数和指针都不可一修改)
2. 一些容易混淆的定义
一个整型数 int a
一个指向整型数的指针 int *a
一个指向指针的指针,他指向的指针是一个整型数 int **a
一个有十个整型数的数组 int a[10]
一个有十个指针的数组,该指针是一个指向整型数的 int *a[10]
一个指向十个整型数数组的指针 int (*a)[10]
一个指向函数的指针,该函数有一个整型参数并返回一个整型数 int (*a)(int)
一个有十个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型 int (*a[10])(int)
3. 关键字static的作用
在函数体内,一个被申明为static的变量在该函数被调用过程中保持其值不变
在模块内(函数体外),一个被申明为static的变量可以被模块内的函数访问,但不能被模块外的函数访问。他是一个本地的全局变量。
在模块内,一个被申明为static的函数只可以被被这一模块内的函数调用。就是说这个函数被限制在这个模块内部本地使用。
4.一个常用的位操作
给一个整型数a,写两段代码,第一个设置a的bit 3,另一个清除a的bit 3
#define BIT3 (0x1<<3)
static int a;
void set_bit3(void ){
a |= BIT3;
}
void clear_bit3(void){
a &= ~BIT3;
}
5.修改内存某处的值
要求设置一内存绝对地址为0x67a9的值为0xaa66
注:将一整型数强制转换为指针是合法的!