20100531--《C陷阱与缺陷》第三章读书笔记

  今天是5月的最后一天了,2010年的5月,倒霉的一个月终于要过去了。今天抽空我又读完了第三章,顺便做下笔记。

  这一章的题目叫做---语义“陷阱”

  程序也有可能表面看上去是一个意思,实际上的意思却相去甚远。

  对于数组:

  C语言中只有一维数组,数组的大小必须在编译期就作为一个常数确定下来。多维数组是利用了C语言中数组元素的类型可以是任意的,当然也可以是一个数组。所以可以“仿真”出多维数组。对于一个数组,我们能够制定它的大小,并且获得指向该数组的下标为0的元素的指针。数组的下标操作其实就是对指针的操作。

将数组作为函数参数毫无意义,C语言会自动将作为参数的数组声明转换为相应的指针声明。

数组中实际不掺在“溢界”元素的地址位于数组所占内存之后,这个地址可以用于进行赋值和比较。但是引用时非法的。

  指针:

  int a[10]; a是一个拥有10个整型元素的数组,a是数组元素首地址。

int b[10][12];b是一个拥有10个整型数组元素(每个元素含有12个整型元素)的数组,b是指向数组的数组的指针。b[n],是数组b[n]中下标为0的元素的地址。

int *p;p是指向整型的指针,可以用p=a;

int (*m)[12];m是一个指向有12个整型元素的数组的指针,可以用m=b;

对于字符串指针,其末尾是一个空字符'/0'作为结束标志。

使用malloc开辟空间的时候,需要注意检查是否开辟成功,使用完成后要显示的释放内存空间。

指针是指向内存地址的,指针所指向的内容可以是任意类型。

对于C编译器,将常数0转换而来的指针不等于任何有效的指针,用NULL代替(#define NULL 0).当常数0被转换为指针使用时,这个指针绝对不能被解除引用(dereference),也就是说,绝对不能企图使用该指针所指向的内存中存储的内容。

  边界

C语言中一个拥有n个元素的数组,却不存在下标为n的元素,它的元素下标范围是从0到n-1。下界可以取到,上界取不到的情况,元素个数就是拿上界减去下界(不对称边界);上下界都能取到,元素个数为则用上界-下界+1.

其他:

对于有符号数判断其是否溢出:if(a>INT_MAX-b)   complain();

函数不加类型,默认为 int型,一个返回值为整形的函数如果返回失败,实际上是隐含的返回了某个“垃圾”整数。

 

希望以后能用到,好累啊。。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值