C陷阱与缺陷读书笔记(第3章)语义“陷阱”

本文详细解析了C语言中数组与指针的基本概念及其相互间的关系,包括数组的定义、指针与数组下标的运算原理、动态内存分配及数组作为函数参数时的行为等。此外还介绍了如何避免常见的编程陷阱。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.C语言只有一维数组,而且数组的大小必须在编译器就作为一个常数确定下来。

2.任何一个数组下标进行运算的,实际上都是通过指针进行。

3.int calendar[12][31]  calendar是一个数组,该数组包含12个数组类型的元素,其中每个元素都是一个拥有31个整型元素的数组。

4.除了数组名a 被用作运算符 sizeof 的参数这一情形,在其他所有的情形中数组名都代表指向数组的下标为0的元素指针。

5.int (*ap) [31]声明了*ap是一个拥有31个整型元素的数组,则ap就是一个指向这样数组的指针。

6.库函数 malloc   ,该函数接受一个整数,然后分配容纳同样数目的字符的一块内存。

7.C语言中会自动地将作为参数的数组声明转换为相应的指针声明。

8.复制指针并不同时复制指针所指向的数据。

9.当常数0赋值给一个指针变量时,绝对不能被解引用。

10.重复执行表达式 --n>=0只是进行n次迭代的一种方法。

11.数组中实际不存在的”溢界“元素的地址位于数组所占内存之后,这个地址可以进行赋值和比较。当然如果要引用该元素,则就是非法的了。

12,当两个操作数都是有符号数时,溢出就有可能发生,一种正确的方式是将a和b都强制转换成无符号数。

if((unsigned)+(unsigned)b>INT_MAX)  

也可以写成

if (a>INT_MAX-b)

13.为main函数提供返回值

0代表成功,返回非0代表程序执行失败。

14.逗号运算符,首先对左侧操作数求值,然后该值被丢弃,再对右侧操作数求值。

注意,分隔函数参数的逗号非逗号运算符。

15.避免栏杆错误的两个通用原则  首先考虑简单情况下的特例,然后将得到的结果外推,仔细计算边界,绝不掉以轻心。

16.下界是入界点,包含在取值范围中,而上界是出界点,不包含在取值范围中。

如果取值范围为空,则上界等于下界。

17.缓冲区中已经存放的字符

bufptr-buffer    

未占用的字符   N-(bufptr-buffer)






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值