初学C语言容易遗忘的小知识点归纳

xiaoxiao2021-02-28  111

知识点:

1. C把所有的非零值都视为真; 2. C中有三种循环for,while,do while. 如何选择循环? 首先确定是入口条件循环还是出口条件循环,for、while或者do while;如果是入口,for和while皆可,但一般而言,当循环涉及初始化和更新变量时,用for比较合适,其他情况用while更好。 3. main() 通常只提供整个程序的框架,最好把main() 放在所有函数定义的前面;另外,通常把函数放在其他文件中; 4. 清除控制台的内容,可使用system(“cls”); —–#include 5. if 等后面括号里的语句在书写的时候一定要注意是条件语句( j == 20 )还是赋值语句( j = 20 ) 6. 声明变量和定义变量的区别:与函数的声明定义类似,声明变量只是表示该变量存在,不会为变量分配存储空间,所以声明变量不能给变量赋值,但是定义变量可以,如下。 声明变量:

extern int a; // 这里只是声明该变量的存在,该变量可能是在其他文件中定义的

定义变量:

int a = 0;

7. 赋值语句需要有函数执行,C语言最基本的执行体是函数,在函数外定义变量时可以初始化,但是不能赋值。具体可见谦190的博客《C语言全局变量和局部变量总结》:http://blog.csdn.net/u013355826/article/details/53224303 8. 无论是C还是C++程序,运行时候的变量主要有三种分配方式:堆分配、栈分配、全局和静态内存分配。内存泄漏主要发生在堆内存分配方式中。 9. C语言不允许在一个函数中定义其他函数,因此函数本身就是外部的。 10.

a = 249, 500; // a = 249; a = (249, 500); // a = 500;

11. 字符是作为整数存储的:putchar(‘C’ + 1)输出的是 ‘D’. 12. 如果没有花括号,else与离它最近的if配对,如

if (a > 6) if (a < 12) printf("You're close!\n"); else // else与第二个if配对。 printf("Sorry, you lose a turn!\n");

13. switch在圆括号中的测试表达式应该是一个整数值(包括char类型):switch ( 整型表达式 ) { } 如果是根据浮点类型的变量或者表达式来选择,就无法使用switch 14. 使用switch的程序通常运行更快,生成的代码更少。 15. K&R提到:goto语句“已被滥用”,建议“谨慎使用或者根本不用”; 程序员可以接受的一种goto的用法——出现问题时从一组嵌套循环中跳出(一条break语句只能跳出当前循环); 过度的使用goto语句,会让程序错综复杂。如果不熟悉goto语句,就不要使用它。如果已经习惯使用goto语句,试着改掉这个毛病。 16. “定义”表示创建变量或分配存储单元,而“声明”指的是说明变量的性质,并不分配存储单元。 17. 当float类型被作为参数传递时会被升级为double类型;如果在调用函数之前没有声明函数,编译器会对函数原型进行推断,仅推断参数个数,而参数类型则一律认为是int型,所以编译可能不会报错,但是结果却大相径庭,不过会有warning,所以编译完成后尽量关注和修改warning。 18. 声明了函数原型后,编译器可以检查函数调用是否与函数原型匹配,如果参数类型不匹配,编译器会实际参数的类型转换为形式参数的类型。 19. 错误和警告的区别是:错误导致无法编译,而警告仍然允许编译。 20. 对于递归和循环,一般而言,选择循环较好,因为递归有以下缺点:

每次递归都会创建一组变量,所以递归使用的内存更多,而且每次递归调用都会把创建的一组新变量放在栈中; 如果两次或多次调用自己,消耗的内存将呈指数增长;每次函数调用要花费一定的时间,所以递归的执行速度较慢;递归不方便阅读和维护。

在某些情况下,不能用简单的循环代替递归,因此还是要好好理解递归。 在解决倒序问题时,递归往往比循环简单。

21. 打印地址的转换为:%p

陷阱:

1. 考虑到影响执行的速度,C编译器不会检查数组的下标是否正确,如先声明a[10],后对a[12]赋值,a[12] = 33; 编译器不会查找这样的错误。当运行程序时,这可能会导致数据被放置在已被其他数据占用的地方,可能会破坏程序的结果甚至程序异常中断;

转载请注明原文地址: https://www.6miu.com/read-36377.html

最新回复(0)