最容易忽略的C语言知识点细节,编程大牛进阶之路!

当你选择了一种语言,意味着你还选择了一组技术、一个社区。——Joshua Bloch

一条长语句需要换行写,可以在行的末尾加入反斜杠 \ 表示;宏都是单行定义,如果多行定义,也是用反斜杠 \ 表示。

例如:

    #define  LONG_MACRO  \

            "...........很长的字符串哈........."     

    int i,j,k  \

        x,y,z;


变量有全局变量、局部变量,全局变量系统默认初始化,局部变量不会自动初始化,建议所有变量使用前,手工初始化。

基本数值类型转换有两种,一种隐式,一种显式,建议在需要类型转换的情况下,一律使用强制转换运算符 (类型)变量名 显式转换,转换的原则是从取值范围较小的类型转到取值范围较大的类型,结果值不会损失,反之结果值则损失部分值。

数组分配的内存空间是连续的,从低地址到高地址,数组第1个元素的地址就是内存空间的首地址。

数组的下标是从0开始,长度为n的数组,最大下标是n-1,数组下标超出范围,越界访问是严重的错误。

数组可以作为参数(指针或数组形式)传递给函数,但是不能作为函数返回值,可以返回指向数组的指针。

例如:

sizeof(int)是求类型长度的运算符,不是函数。

 

函数声明中的参数名称可以省略,也可以和函数定义不一样。

例如:以下三种都是声明相同的函数func,第三种声明且定义了函数。

    int func(int,int);

    int func(int a, int b);

    int func(int c, int d)

    {

    }

main函数可以不带参数,也可以带两个参数,带参数时,执行程序时可以实现命令行参数功能。

例如:

    编译以后程序名称为 test.exe

函数类型是由函数返回值类型、函数名称、参数类型列表标识,只要三者相同则为同一个函数类型,参数名称不是。

 

C语言函数允许递归调用,在函数中调用自身,函数递归是将大问题化解相似的小问题去解决,函数必须设置递归调用的结束条件,一般是当化解成的小问题可以直接解决时,递归返回值。例如计算阶乘值,例如10的阶乘,化解成10*9的阶乘,9的阶乘可以进一步化解成9*8的阶乘,每次求阶乘的方式一样,只是问题大小不一样,当求最小问题1的阶乘时,就可以直接返回1。

例如:

C语言函数支持变长参数,参数个数可以不确定,通过<stdarg.h>标准库提供支持。

 

位段类型空间分配规则,当一个int型无法容纳全部位段信息,就会再次分配另一个int类型,空间只会以int的整数倍分配;当int型剩余的位数无法满足当前位段成员要求,则该成员的值会直接存储到下一个int型的空间,不会跨两个int型空间存储。

参数化宏实现函数功能时,更加强大和灵活,因为没有类型限制。

例如:

    #define  MAX(a,b) ((a) > (b) ? (a) : (b))

    返回a,b中值比较大的,a,b只要能比较大小就可以,不限定类型。


       如果你想要获取更多C语言、C++、Window以及QT的知识!笔者推荐一个C语言/C++编程零基础入门学习交流俱乐部(点击进入,有编程学习文件(源码,项目实战教学视频以及给小白的零基础教程),欢迎初学者和正在进阶中的小伙伴们!