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

知识点:

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; 编译器不会查找这样的错误。当运行程序时,这可能会导致数据被放置在已被其他数据占用的地方,可能会破坏程序的结果甚至程序异常中断;

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值