C语言深度解剖

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/guorong520/article/details/82079725

一、关键字

1.关键字
是编译器能认识的特殊字符串符号。C语言共有32个关键字,含sizeof,计算对象所占内存空间的大小。
2.定义
创建一个对象并分配一块内存。
3.声明
告诉编译器,名字已经匹配到了一块空间,别的地方不能用它来作为变量名或对象名。声明没有分配内存,可以出现多次声明。
4.局部变量
也叫自动变量。是一个一次性变量,用的时候入栈,不用的时候出栈,这样可以更高效的利用内存。
5.全局变量
局部变量和全局变量都存在内存的静态区。
6.register
请求编译器尽可能的将变量存在CPU内部寄存器而不是通过内存寻址访问以提高效率。计算机寄存器数量及其有限、价钱高。
register变量必须是一个单个的值,长度<=整型的长度。register变量可能不存放在内存中,所以不能用&符号获取地址。
7.static
①修饰变量
静态全局变量:作用域仅限于变量被定义的文件中,从定义之处开始,到文件结尾结束。
静态局部变量:只能在本函数里使用,被static修饰的变量都总是被放在了内存静态区,即使这个函数运行结束,这个静态变量也不会被销毁,再次调用函数下次依然在使用时会用到这个值,也就是指static int a=10;语句只执行一次。
②修饰函数
使函数成为静态函数,作用域只限于在本文件(所以又称内部函数),不用担心与其他文件的函数同名。
8.变量的命名规则
最好采用英文单词或组合,不要使用拼音。
int CurrentVal;
程序不得出现仅靠大小写区分的相似标识符,如dog、GOG、
一个函数名禁止被用于其他之处。
所有宏定义、枚举常数、只读变量全用大写字母命名,用下划线分割单词。如MAX_LENGTH.
整型类型n,m,i,j,k 字符类型c,ch 指针p 数组a。
9.bool类型与0值比较
if语句真执行,假不执行。if(Flag)
10.指针变量与0值比较
int *p=NULL;
if(NULL==p) if(NULL!=p)
11.在switch case中
1)每个case语句后面加上break;
2)必须使用default分支,即便你不用。
12.循环语句应将长循环放在最内层,短循环放在最外层,可以减少CPU跨切循环层的次数。
13. void *则不同,任何类型的指针都可以直接赋值给它,反之错误。
void *p1;
int *p2;
p1=p2; //正确
14.在C语言中
若函数不接受任何参数,一定要指明参数为 void。
15.volatile
易变的、不稳定的。保证对内存的可见性,编译器对访问该变量的代码不在进行优化。
16.extern
外面的、外来的。
17.空结构体
大小为1个字节。任何一种数据类型都有其大小。
18.柔性数组
结构中最后一个元素允许是未知大小的数组,这就叫做柔性数组成员,但这个成员前面必须至少有一个其他成员。sizeof返回的这种结构大小不包括柔性数组的内存。

typedef struct st_type
{
    int b;
    int arr[];  //或者int arr[0];求出的sizeof大小为4。
}type_a;
//柔性数组算不得结构体正式成员,就算开辟了内存空间,大小也不包含柔性数组的大小。

19.struct与class
struct默认为公有的,class默认为私有的,结构体里可以放函数。
20.union
所有数据成员共用一个空间,具有相同的起始地址,同一时间只能存储其中一个数据成员。

intcheckSystem( )
{
    unioncheck
    {
        int i;
        char ch;
    } c;
    c.i = 1;
    return(c.ch ==1);
}

21.enum
1)不赋值则会从被赋初值的那个常量开始,依次加 1,如果都没有赋值,它们的值从 0 开始依次递增 1。
2)可以调试枚举常量,但是不能调试宏常量,宏一次只能定义一个。

猜你喜欢

转载自blog.csdn.net/guorong520/article/details/82079725
今日推荐