随笔分类 -  C

摘要:1)fflush编译器规定,fflush用于刷新输出流,对于输入流没有规定,也就是说 fflush(stdin) 的结果是未知的。这也就是在 VC下写C程序时,fflush(stdin)有效,VC下写C++程序时,fflush(stdin)无效的原因。2)VC下写C++程序时,清空缓存使用 clea... 阅读全文
posted @ 2014-12-30 00:04 luzhiyuan 阅读(304) 评论(0) 推荐(0)
摘要:1. Malloc:malloc/free是C++和C的标准库函数,可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用 malloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是 库函数而不是运算符,... 阅读全文
posted @ 2014-08-04 10:30 luzhiyuan 阅读(152) 评论(0) 推荐(0)
摘要:当一个数组名出现在一个表达式中时,它会被转换为指向该数组第一个元素的指针常量,既然是常量,那么对它进行 & 操作,似乎会有问题。1 void main ()2 {3 int ary[5] = {1, 2, 3, 4, 5};4 5 printf("%p\r\n", ary);6 printf("%p\r\n", &ary);7 }编译,运行,一切都很正常。我们都知道,& 操作符的操作对象必须是左值,为什么可以对一个常量进行 & 操作呢?可以通过下面这段代码,验证 ary 是一个常量1 void main ()2 {3 in 阅读全文
posted @ 2014-03-31 18:58 luzhiyuan 阅读(1003) 评论(0) 推荐(0)
摘要:1 void main () 2 { 3 int c = 6; 4 int d = 7; 5 6 printf("%d,%d\r\n", c, d); 7 8 c ^= d; 9 d ^= c;10 c ^= d;11 12 printf("%d,%d\r\n", c, d); 13 } 阅读全文
posted @ 2014-03-31 17:23 luzhiyuan 阅读(140) 评论(0) 推荐(0)
摘要:请信任程序员不要阻止程序员去做需要做的事情保持语言的小巧为每一种操作只提供一种方法就算不能保证可移植性,也要保证效率 阅读全文
posted @ 2014-03-30 16:23 luzhiyuan 阅读(538) 评论(0) 推荐(0)
摘要:前面我们提到,当操作符的操作数类型不一致时,会发生类型转换,它负责把两个不同的操作数类型转换成同一种普通操作类型,转换后的类型,一般也就是结果类型。抛砖: printf (“%d”, sizeof ‘A’); 这行代码打印出存储一个字符字面值类型的长度。你敢确定它的结果是 1 吗?运行一下试试。你会发现它的结果是 4 (或者是你机器上int的长度)。字符常量的类型是int,根据提升规则,它由 char 转换为 int 。这个概念在 K&R 中是这样描述的: 在表达式中,每个 char 都被转换为 int ···注意所有位于位于表达式中的 float 都被转 阅读全文
posted @ 2014-03-22 10:50 luzhiyuan 阅读(779) 评论(0) 推荐(0)
摘要:先抛砖: 1 char * const * (* next) ( );对于这种复杂的声明形式,你明白它的确切意思吗?C语言声明的优先级规则:A、声明从它的名字开始读取,然后按照优先级顺序依次读取。B、优先级从高到低依次是: 1、声明中被括号括起来的那部分 2、后缀操作符: 括号()表示这时... 阅读全文
posted @ 2014-03-20 18:22 luzhiyuan 阅读(273) 评论(0) 推荐(0)
摘要:K&R C 采用无符号保留(unsigned preserving)原则,就是当一个无符号类型与int或更小的整型混合使用时,结果类型是无符号类型。 这是个简单的规则,与硬件无关。但是,真如下面的例子所展示的那样,它有时会使一个负数丢失符号位。ANSI C 采用值保留()原则,就是当把几个整型操作数像下面那样混合使用时,结果类型有可能是有符号数,也可能是无符号数,取决于操作数的类型的相对大小。 1 void main() 2 { 3 4 unsigned int i = 1; 5 int j = -1; 6 if (j < i) 7 { 8 ... 阅读全文
posted @ 2014-03-09 11:39 luzhiyuan 阅读(1099) 评论(0) 推荐(0)
摘要:1、访问方式不同 ⑴数组的下标引用(读一次内存) char ary[5] = "hello",c; ...... c = ary[2]; ⑵对指针的引用(读两次内存) char *P,c; ...... c = *p; ⑶对指针进行下标引用(读两次内存) char *p = "hello"; ...... c = p[2]; 2、在ANSI C中,初始化指针时所创建的字符常量(注意只能在char型时赋初值,如char *p = "hello";但是float *pip = 3.14;将无法通过编译)被定义为只读。如果试图通过指针修改这 阅读全文
posted @ 2014-03-08 14:31 luzhiyuan 阅读(261) 评论(0) 推荐(0)