typedef
typedef char *ptr_to_char;
ptr_to_char a;
上述代码把 char *看作一个整体,认为 ptr_to_char 是一个char *的类型
const是先左结合再右结合
int const a;
const int a;
上述两句话的作用是一样的
但是下面的
int *pi//一个普通指针
int const *cpi;//可以修改指针的值,但不能修改指向的值
int *const cpi;//指针无法修改,但是可以修改指向的值
int const *const cpi;//无论是指针和和值都无法修改
我的理解
(int const) *cpi;
((int *)const) cpi;
(int const) (*const) cpi;
链接属性(linkage)
external(外部)
internal(内部)
none(无)
typedef char *a;
static int b;//表明这个变量为这个源文件私有
/*extern以及static使读者更能体会申明变量的用途*/
int c(int d)
{
extern int e;//静态
int f(int g);
...
}
默认情况下是external,但是加static可以使其变成internal,static只对默认缺省为external的有效。
存储类型
普通内存,堆栈,硬件寄存器可以存储变量。
1)代码块外部的属于 static,也就是普通内存,代码运行时一直存在
2)代码块内部的是自动的automatic,称为auto变量,离开该代码块便自动销毁,但是在代码块内申明static,并不修改其作用域。
3)register