c陷阱与缺陷阅读笔记
【1】 “ = ”的优先级低于 “ || ” 且 “ = ” 为右结合性,注意一下代码为死循环:while(c=' '||c=='\t'||c=='\n')
程序本意是跳过空格,制表符,换行符,但由于不小心将c==' '写成了c= ' '导致程序进入死循环
【2】a=-1 在很老的C版本里理解为 a =- 1
【3】单引号代表一个整数,如a='a'或0141或97
【4】a++不能作为左操作符,a+++++b = (a++) + (++b)
【5】void add() ==== void (*add)() *add() ==== * add()
【6】void (*signal(int,void(*)(int)))(int) (好复杂)
typedef void (*HANDLER)(int)
HANDLER signal(int,HANDLER) (太难理解了,而且不知道自己理解的对否!)
【7】两个二的倍数相加可用按位或代替 1+2=1|2
【8】结构体成员选择符>单目运算符(类型转换符是单目)>双目运算符(运算>移位>关系>逻辑>赋值>条件(其实是三目的))>逗号
【9】main 默认返回值为int
【10】震撼消息:C实际上是不支持二维数组的,所谓的二维数组实际上是元素为数组的一维数组,不过这就容易理解一点东西,比如:
a[10][10] a[2]实际是第三行第一个元素的地址a[2]+1是第四行第一个元素的地址
【11】
#include<stdio.h>
void main()
{
int i,a[10];
for(i = 1;i<=10;i++)
{
a[i]=0;
}
}
简单吧,不过是死循环,数组越界覆盖了的i值
【12】推荐a>=0&&a<9写法
【13】注意g((x,y)) 先求x再求y,但x被舍弃了 不同于 g(x,y)
【14】int mid=(hi+lo)/2 ===> int mid =(hi+lo)>>1
【15】在很多机器上下标运算是比指针运算要慢的!
相关文档:
可惜MS-DOS不是中国人写的,不支持中文。
/* Note:Your choice is C IDE */
#include "stdio.h"
main(int argc, char *argv[])
{
FILE *fp;
char ch;
int num=0,max;
int line=0;
if((fp=fopen(argv[1],"rt"))==NULL)
{
printf("\nCannot open file strike any key exit!");
getch();
exit(1);
......
源程序编译
Makefile的编写
程序库的链接
程序的调试
头文件和系统求助
1.源程序的编译
在Linux下面,如果要编译一个C语言源程序,我们要使用GNU的gcc编译器. 下面我们以一个实例来说明如何使用gcc编译器.
......
9.2 共用体
C语言除了提供结构体这种可包含多种类型数据的构造类型外,还提供了一种从形式上看和结构体堪称“孪生兄弟”的构造类型——共用体(union)。
本节从共用体的概念入手,从共用体的概念、与结构体的异同、使用等方面进行详细的介绍。
9.2.1 什么是共用体
现实生活中,某些事 ......
#include <stdio.h>
int Count=0;
void move(char x,int n,char z){
printf(" %d. disk %d: %c => %c\n",++Count,n,x,z);
}//move
// 将塔座x上按直径由小到大且自上而下编号为1至n的n个圆盘按规则搬到塔座z上,y可用作辅助塔座
void Hanoi(int n,char x,char y,char z){
if (n==1) move(x,1,z ......
数组是类型相同的对象的序列,其中的对象称为数组元素。也可以将数组想像成一连串的用下标值编号的相邻存储区。
可能在某些编程语言中,一个下标变量是不允许超出数组定义中所设的界限的。但是在C和C++中,数组是没有这种安全措施的。下面先来看看数组下标越界的几种异常结果。
&nb ......