C语言基础知识点总结

前几天翻一些旧书,偶尔找到了以前C语言的笔记本,记载的都是当时自己学C语言容易忘的知识点,算是干货吧,给各位总结一下。(一下知识点针对本人学习遇到的问题所总结不一定有代表性,仅供参考)。内容取材于c primer plus中文版(第六版),顺序按照该书的章节顺序。
第二章:
1.如果程序在屏幕上一闪而过,可以在return语句之前加上getchar();这样的话代码会让程序等待击键,窗口会在用户按下任意键之后关闭。当然也可以用system("pause");代替之,但是使用此语句需要加上#include头文件。
2.#include ——预处理器指令;main()函数总是第一个被调用的函数,无论位置在哪里;int main()是最规范的写法,void main()虽然有些编译器支持,但是不要这样写!不要这样写!不要这样写!
3.对于注释大家还是要有,若干时间后,你在看你的代码,也许你自己都忘了当初这个东西是干嘛用的了,因此注释可以提高代码的可读性,而编译器会主动忽略这些语句。
4.名称的声明可以是小写字母,大写字母,数字和下划线,名称的第一个字符必须是字母或者下划线,不能是数字
5.函数的实际参数是传递给函数的特定值,形式参数是用于储存值的变量。
6.return语句一定要,可以直接看出你的代码习惯。
7.提高代码可读性的技巧:选择有意义的函数名;写注释;在函数中使用空行或空格来分隔概念上的多个部分;每个语句各占一行。
8.在函数声明和函数调用的时候都要在末尾加上;,但在函数定义的时候不用加;。
第三章
1.从高精度向低精度进行强制类型转换可能导致丢失数据。
2.0x或者0X前缀表示16进制数字,0前缀表示8进制数字。
3.三种计数方法:
数字| 123000 | 0.000056 |332.56
科学计数法| 1.23 * 10^5| 5.6 * 10^-5|3.3256 * 10^2
指数计数法|1.23e^5 |5.6e^-5 |3.3256e^2
4.printf()函数中的转换说明决定了数据的显示方式而不是存储方式。
5.用%d显示float类型的值,其值不会被转换成int类型。
第四章
1.对于字符数组,在scanf进行数据录入的时候不需要取址符,因为数组的名字就是数组首元素的地址。而且,C语言中的字符串一定以空字符(\0)结束,因此数组的容量一定要比待储存的字符串的字符数多1。
2.“x”表示的是一个字符串,'x’表示的是一个字符常量。
3.sizeof运算符以字节为单位给出对象大小,strlen()函数给出字符串的字符长度(不包含空字符)。对于char name[40];如果用户给name赋值为abc,那么sizeof(name)会返回40,而strlen(name)返回的值是3。
4.printf("%m.nd\n",data);m是字段宽度,n是小数点后的位数,字段宽度包含小数点。
5.float类型数据放入printf函数的时候会被自动转化成double类型,计算机会根据变量类型(而不是转换说明)将这些值放入栈中,该函数会根据转换说明(而不是变量类型)从栈中读取值
6.printf()函数与scanf()函数一样,也有返回值,他返回的是打印字符的个数,即双引号里面的东西。
7.求模运算只能用于整数之间,给出的是左边整数除以右边整数的余数。如果左边的数字为负数则结果为负数,左边为整数则结果为正数。
第六章
1.C语言中,非0为真0为假,for语句和while语句可以相互替换。
2.do while循环至少执行一次且while之后要加上;(分号)。
3.sacnf成功读取一个数会返回1,读取两个会返回2,以此类推……
4.else只会与最近的if进行匹配,不论这二者是否对齐等(编译器会忽略缩进)。
5.for循环中:continue执行后,首先递增参数的值,然后在做比较。break语句执行后,直接执行循环后面的第一条语句,会跳过更新部分。
6.混合使用scanf()与getchar()会导致缓冲区里的回车符导致程序出现不可预估的后果,可以在getchar()之前加上刷新缓存区的函数来解决,例如:fflush(stdin),setbuf()等
第九章
1.在函数中定义了的变量,该变量具有块作用域,且属于该函数私有,如果在其他函数中又定义了该变量则不会引起冲突。
2.形式参数也是局部变量,实际参数也可以是一个表达式。
3.如果函数的返回值类型与函数本身定义的返回值类型不匹配的话,其真实的返回值是有定义函数的返回值决定的,也就是说,按照函数定义时的类型来进行返回值确定。
4.递归消耗内存多且耗时效率不高,因为每次递归的时候都会创立新的变量,导致栈内存占用过多。
第十章
1.初始化数组的时候可以不写其大小,计算机会根据用户输入计算出数组大小 (以字节为单位)。
2.指针的值是其所指对象的地址,数组名是数组首元素的地址。
3.数组可以用指针+偏移量来表示。
4.利用数组中两个指针的差值可以算出这两个元素的距离(单位是数组的类型名)比如两个int。
5.创建指针时,系统只分配了储存指针本身的内存,并未分配数据的内存,因此在使用指针之前必须用已经分配的地址初始化该指针。
第十一章
1.puts函数会在字符串显示末尾自动加上换行符,gets函数不会考虑数组的是否越界问题,因此该函数不安全(c11标准已经废除该函数),使用的时候需要小心。
2.字符串常量属于静态存储类别,如果在函数中使用字符串常量该字符串只会被存储一次,在整个程序的生命期内存在,即使函数被调用多次。
第十二章
1.三种连接属性分别为:外部链接(可以在多文件中被使用)、内部链接(只能在一个翻译单元中使用)、无链接(具有块作用域,函数作用域)。
2.静态变量再循环的时候每次使用的都是上一次操作之后的值,而不是每次都会刷新该值。
3.某文件中对外部变量进行定义式声明只是允许其他文件使用该变量,如果其他文件没有使用extern,那么是不可以使用该变量的。
4.malloc申请的内存空间应该及时被free掉,否则会造成内存泄漏等不安全事件发生。

你可能感兴趣的:(C语言基础知识点总结)