摘要: C语言中,const限定词指定了一个不可修改的变量,但并不是常量。它可以使编译器帮助我们保证某些变量不被意外修改,例如指针或引用传递时,加上const可保证我们的源数据不被破坏。const修饰指针时情况比一般情况下要复杂许多,先看下面这个例子:1 const char * p1;//p1指向的内容不可变2 char const * p2;//p2指向的内容不可变3 char * const p3;//p3不可变,但其指向的内容可变通过注释可以看出,当const在*前时,其修饰的是指针指向的内容,但指针本身是可变的,我们可以用它来遍历一个源数组或其他一组不想被意外破外的数据;当const在*后时 阅读全文
posted @ 2011-08-02 15:37 sunnylgz 阅读(1079) 评论(4) 推荐(0) 编辑
摘要: 1、以32位float为例:计算机中表达浮点数时分为符号(s),指数(e),尾数(f)三部分,当表示32位float时各部分长度分别为:s(1位),e(8位),f(23位) 。浮点数大小是(-1)^s×2^(e-127) ×1.f。注意:符号位s=1,表示负数;s=0表示负数;指数e为移码方式存储,实际值=存储值-127;尾数f表示了实际数值中的二进制小数部分,整数部分为1。指数e最大值为254,IEEE 745规定当e=255,f=0时表示INF,参考后文(原文摘抄)部分举例说明:当s=0,e=128,f=0时,存储值为:0x4000 0000,真实值为1.0× 阅读全文
posted @ 2011-08-02 10:45 sunnylgz 阅读(526) 评论(1) 推荐(0) 编辑
摘要: 1、释放动态内存时遇到“user breakpoint called from code at 0x********”这个bug多在调用free函数来释放malloc的内存时出现,前先曾多次遇到,但一直未找出问题原因。在网上查了一下,有些写得挺复杂,涉及到了操作系统推维护的内容,现在还不有接触 到这一块,所以没有细看。其他有说到重复释放动态内存,修改动态内存指针或者破坏了系统的动态内存结束标志都会导致这个bug。后来查看自己的代码,发现 重复释放的问题倒是没有,却在操作内存时有一处频繁操作超出动态申请内存之外的单元,故导致这个问题的出现。问题总结:在动态内存释放时出现,多由于动态内存使用不当1 阅读全文
posted @ 2011-08-02 10:07 sunnylgz 阅读(1007) 评论(5) 推荐(0) 编辑
摘要: 在C语言开发中,宏定义是一个非常有用的工具,它可以使我们的代码更容易理解,更容易维护。如查一个常量在多处被使用,且今后可能会根据不同需要而修改的话,将其define一下那是再好不过了。除此之外,宏定义还有其他的功能,了解它,将更好地辅助我们开发C程序。先看个例子#define Conn(x,y) x##y #define ToString(x) #x #define ToChar(x) #@x这几个宏定义中分别用到了“##”、“#”,“#@”它们的功能分别是:1、粘接操作符##——连接两个宏名,注意所连接的是宏名,而不是其所指代的值;如int Conn(a,b);定义了一个int型变量ab,以 阅读全文
posted @ 2011-08-02 09:50 sunnylgz 阅读(3485) 评论(3) 推荐(1) 编辑