《C专家编程》笔记2

第二章 这不是Bug, 而是语言特性

无论在什么时候,如果遇见了这样一条语句malloc(strlen(str)); , 几乎可以断定它是错误的,malloc(strlen(str)+1);才对;

总结——进步是计算机软件工程和编程语言设计艺术逐步发展的重要动因;

#include<stdio.h> int main(int argc, char **argv) { const int one = 1; int i = 1; switch(i) { case one: printf("1"); } }

以上代码编译都不会通过,说明const 其实并不真正表示常量;

break 语句事实上跳出的是最近的那层循环语句或者switch 语句;

当sizeof 的操作数时个类型名时,两边必须加上括号,(这常常使人误以为它是个函数),但操作数如果是变量则不必加括号;

有些专家建议在C语言中记牢两个优先级就够了:乘法和除法大于加法和减法,在设计其他的操作符时一律加上括号;

操作符的结合性:它是仲裁者,在几个操作符具有相同优先级时决定先执行哪一个;

所有赋值符(包括符合赋值符)都具有右结合性;(又结合的也就两类一类是赋值符一类是单目运算符);

#include<stdio.h> #include<string.h> char * f() { char buf[10]; strcpy(buf, "abcdefg"); return buf; } int main(int argc, char **argv) { printf("%s",f()); }
以上代码打印不出预计值,因为buf是局部变量,函数结束时,由于该变量已被销毁,谁也不知道这个指针所指向的地址的内容是什么;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值