C和指针_第3章_数据_学习笔记
扫描二维码
随时随地手机看文章
1.typedef
typeof char *ptr_to_char; ptr_to_char a, b; //等价于 char *a , *b; //若如下则不然 #define d_ptr_to_char char* d_ptr_to_char a ,b; //等价于 char *a; char b;
2.常量
//关于指针和常量 int const *ptr;
这是一个指向整型常量的指针。可以修改指针的值,但不能修改指针所指向的值。
int * const ptr;
申明ptr是一个指向整型的常量指针。指针的值为常量,无法修改。但其指向的整型值可修改。
int const * const ptr;
无论是指针还是指针指向的值均为常量,不能修改。
3.作用域
文件作用域、函数作用域、代码块作用域和原型作用域。其中一对花括号之间的所有语句成为一个代码块。
4.链接属性
external、internal和none
typedef char *a; int b; int c(int d) { int e; int f(int g ); }
默认状态下,标识符b,c,f的链接属性为external。
代码块外变量默认为external,函数声名默认具有external属性。
关键字exter和static可以在声明中修改标识符的链接属性。static只对默认链接属性为exter的声明才具有改变链接属性的效果。
5.存储类型
普通内存、运行时栈、硬件寄存器。
凡在任何代码块之外声明的变量总存储于静态内存中,也就是不属于堆栈的内存,静态变量(static)。若不设置初始值,默认0.
在代码块内部声明的变量的默认存储类型为automatic,若不设置初始值,值未知。
注意:
static:
当其用于函数定义或者用于代码块之外的变量声明时,值用于改变标识符的链接属性,不改变其存储类型和作用域。
当其用于代码块内部的变量声明时,用于修改变量的存储类型。
全局所有代码块之外否从声明处至文件尾不允许从其他源文件访问局部代码块起始处是整个代码块
变量不存储于堆栈中,它的值在程序整
个执行期一直保持
形式参数函数头部是整个函数不允许
6.编程提示
6.1 为了保持最佳的可移植性,把字符的值限制在有符号和无符号字符范围的交集之内,或者不要在字符上执行算数运算。
6.2 用它们在使用时最自然的形式来表示整型常量。
6.3 不要把整型值和枚举值混用。
6.4 不要依赖隐式声明。
6.5 在定义类型的新名字时,采用typedef而不是#define
6.6 用const声明其值不会修改的变量。
6.7 使用名字常量而不是整型常量。
6.8 不要在嵌套的代码块使用相同的变量名。
6.9 除了实体的具体定义位置之外,在它的其他声明位置都使用extern关键字。
变量类型 | 声明位置 | 是否存在于堆栈 | 作用域 | 如果申明为static |
---|