C语言扫盲及深化学习

c语言特点:
(1)效率高
(2)控制性强
(3)硬件亲和性好
(4)可移植性高

一、关于注释

c语言中注释不能嵌套,因此注释代码时一定要注意源代码中是否已经存在注释。要从逻辑上删除一段代码,利用预编译指令更加安全有效,其格式为:

#if 0
statment;
#endif

二、关于函数参数

如果函数参数带有const,则表示函数将不会改变调用者传递的参数。

三、关于传址和传值

在c语言中,标量和常量是按值传递,而数组是传址调用,传值会有临时拷贝,被调函数内部修改该参数对调用函数来说是无效的。所有传递给函数的参数都是按值传递的,但是数组是按引用传递。

四、关于c语言的编译链接过程

源码 -> 编译(预处理 + 解析语义 .o文件,即目标代码)-> 链接(目标文件 + 库文件) -> 可执行文件

可执行文件的运行,会绑定一个启动程序,用于处理一些其他事项。

五、关于链接属性

链接属性的作用:标识符的链接属性决定如何处理在不同文件中出现的标识符,标识符的作用域与连接属性有关。

简单的讲,当有多个源文件时,链接属性可以更好的处理所有文件之中的标识符变量,尤其是多个文件中出现的同一个标识符,使程序结构更明晰。

链接属性的类型(以文件为维度):external->文件外部可访问;internal -> 只能在文件内部访问
链接属性对应的关键字:extern 和static,extern表示可访问其他文件中相同的标识符(包括函数和变量),比如可以在file1中定义int a;然后在file2中声明 extern int a;则表示的是file2中的变量a是引用file1中的变量a,也就是说这两个文件中的a是同一个变量。
一般的,全局变量和函数名的默认链接属性为external,而局部变量默认为internal
可以用extern和static关键字修改默认链接属性,如全局变量 static int a;表示a的连接属性为文件内部;而static int function()表示函数function的连接属性为文件内部,即只能在该文件中调用该函数;而对于局部变量extern int b,则表示b为其他文件中定义的变量,即其连接属性为external。

注意:static除了以上表示链接属性的用法之外,还有一种用法,就是将static用于局部变量,对于局部变量sttaic int c来说,其不是改变c的链接属性,而是改变c的存储位置,使得c不再存储在进程的栈空间中,而是编译时将局部变量c存储在进程的.data段(初始化的静态数据区),因此,在该进程中当下一次访问变量c时,c的值为最近修改后的值。这就是static常用的三大用法,即修饰全局变量、修饰函数和修饰局部变量。简单讲,static的主要作用就是定位

六、const和static关键字作用总结

c语言中static三大作用:修饰全局变量、修饰函数和修饰局部变量。当static修饰全局变量和函数时,表示的是链接属性的特征,表示该全局变量或者是函数的链接属性为internal,只有在其所在的文件内可以被访问与调用;而当static修饰局部变量时,不再表示链接属性的特征,而是表示该局部变量的存储位置在.data段(初始化的静态数据区:因为静态局部变量默认情况下会被编译器初始化为0)。
c语言中const常常存在于三种形式:const常量、const与指针和const与形参。const常量就是在一般变量前面加上const修饰,表示该变量不可更改,因此叫做const常量,即给字面值一个名字;const与形参表示的是在函数的声明中将参数用const来修饰,const修饰的形参表示在函数内部该参数不可被更改,这样既能表明编程者的意图,也能防止错误;而const与指针的情况比较复杂,因为涉及到指针和其所指代的内容两个因素,因此,const修饰的是指针还是其所指代的内容,是一个特别容易混淆的点。如下所示作以区分:
(1)int const *pci
写成如上形式,const修饰的是什么呢?有一个简单的记忆法(首先要求将星号跟随变量名作为一个书写习惯,如上述的代码不应写成 int* const pci,虽然也没错,但是习惯问题),因此const修饰的是*pci,而*pci的语义是指针所指代的内容,所以说该种写法表示指针可以修改,但是其所指代的内容不可更改。
(2)int * const pci
显而易见,该种写法const修饰的是pci指针,所以其语义是pci是一个常量指针,指针的值(即所指地址)不可修改;而指针所指代的内容是普通变量,可以修改。
(3)int const * const pci
该种写法就容易理解了,即表示的是指针和其所指代的内容都不可更改。

对于以上const的技法,有一个口诀:即看*与const的相对位置,右定值,左定向(左右是指*的位置)

七、关于右值和左值

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpdpyw.html