2、文件类型为FILE,而非file;
3、printf、fprintf等输出实数时,小数位默认输出6位,所以当printf输出结果是0.000000时,并不代表它一定是0,可能后边还有数字,知识没有显示输出;
4、C语言中没有bool类型,可以用0与非0来代替false和true。C语言中没有string类型,string是C++中的类类型,C风格字符串要用char*表示。
5、将整型数据转化为字符串型可以用函数 char* itoa(int value,char* string,intradix),注意,itoa和atoi不是c标准库函数,而是Windows平台的扩展,所以在其他平台不能用;
6、静态数组初始化时,虽然数组长度不可以是变量,但数组元素可以是变量表达式。
7、命令行调用执行文件时,int main(int argc,char*argv[])的argv中argv[0]是执行文件的名字,后面才依次是命令行执行时写在文件名后面的参数。
8、printf("%d %c %s%f",d,c,s,f);其中d、c、s、f的地方都可以用常量。
9、16进制的前标志是0x,不是ox。
10、typedef struct bi_search_tree
{
}bi_search_tree;
11、C语言区分大小写,表示空指针用NULL,而不是null。
12、C语言也可以用 ->(成员符)。
13、free只能释放指向malloc、realloc、calloc等函数返回的动态分配的空间,不能释放指向静态数组的指针(编译时不报错,执行时会报错)。注意:free是用来释放内存空间,而不是释放指针变量。
14、解引用(*)的优先级比成员操作符(->)的优先级低。
15、C语言的结构体中不可以包含方法(函数),而C++可以。
16、用typedef定义数组类型的别名时,用法是(以int型数组为例,把losertree定义为一个含有5个元素的一维数组的别名):typedefint losertree[5];而不是:typedef int[5] losertree; 后者用法是错误的。
注:用losertree定义的变量,变量名相当于数组名,相当于数组的第一个元素的地址。例如:losertreelt={1,2,3,4,5};则*(lt+2)等于3。
17、加入完全二叉树的叶子节点有k个,那么其非叶子节点的个数为k-1。
18、头文件<limits.h>中包含有INT_MAX、INT_MIN等变量,用来表示int型数能够表示的最大值和最小值。
19、inta[3]={1,2,3};a[1]++;则此时,a[1]等于3。即,a[i]++可以完成对数组a中的第i+1个元素的加1操作。
20、printf("the %dth\n");是可以输出入the 5th、the 22th等这样的形式的。
21、位操作比除、余操作等效率高很多。
22、用{'a','b','c'}这种方式只能用与给字符数组赋值,不能给字符指针赋值。并且只能在字符数组定义并初始化的时候赋值,定义语句之后不能单独给字符数组赋值。如charca[10]={'a','b','c'};是正确的,但char ca[10]; ca={'a','b','c'};是错误的.
23、用"adfad"这种方式给字符数组赋值只能用在字符数组定义的同时初始化这种情况下。定义字符数组语句之后,不能单独用这种方式给已定义的字符数组赋值,应为那相当于把一个字符串常量赋值给一个字符串数组,类型不匹配。
24、对于一个字符数组ca[50]="adfafasd";,是可以用ca[0]='\0'这种方式对ca进行清空的。也可以使用strcpy(ca,"");这种方式对ca进行清空。
25、char ca1[10]="zjwhwd"; char ca2[zhl]; strcpy(ca1,ca2);结果将是ca1变为zhl,也就是说strcpy函数是将目的字符串中的值覆盖了,其本质原因是因为strcpy函数将源字符串中的末尾字符'\0'也赋值到了目的字符串。
26、C语言并没有为数据类型指定特定的长度,编译器可以根据不同的硬件为不同的数据类型指定不同的存储长度。int型一般与计算机的字长相等。
27、C语言中地址的表示:地址一般是整数表示的,可以将地址看作与其长度相等的unsigned型的整数来进行处理(如输出、查看值、比较大小等等)。
28、C语言中的core file是指内存映像,当一个程序崩溃时,系统会将此时的内存映像,以及一些调试信息存入corefile当中。
29、C语言中的printf()函数在指定格式时,有时用*,*代表占位符,是需要你在后面的参数中*对应的位置也指定参数。
printf("test=%*.*f",20,8,fl);
以上语句是要输出浮点型数据fl,输出格式是共20位(包括小数点),小数点后有8位。
30、C语言中函数的名称就是函数的指针。
31、for( ; ;)的作用就相当于while(1)。
32、void (*signal(ing signo),void (*func)(int))(int);
以上是signal()函数的原型,signal函数接受两个参数,第一个参数是整型值,用来指定信号number;第二个参数是一个函数指针,此函数指针指向一个接受整形参数,返回void类型的函数。signal函数的返回值是一个函数指针,此函数指针也是指向一个接受整型数值,返回void类型的函数。
33、使用printf();语句时,%x表示输出一个数的16进制形式。
34、对应一个C类型的字符串,printf时可以直接输出,而不用指定输出的类型,即
35、在用32位表示int型的机器上,以下语句:
int a=-2147483648; //绝对值最大的负数
int b=-a;
printf("b=%d\n",b);
以上代码的运行结果是:b=-2147483648
猜测原因:c语言中在取负时进行的操作是:符号位取反,其余位按位取反,末位加1。所以绝对值最大的负数取负后,值没变。
36、区别字符数组的两种初始化方式
以下代码片段中,字符数组的第一种初始化方法是以'\0'结尾的,第二种初始化方法不是以'\0'结尾的。
char c_arr1[]="hello"; //method one
char c_arr2[]={'h','e','l','l','o'}; //method two
cout<<sizeof(c_arr1)<<endl;
cout<<sizeof(c_arr2)<<endl;
以上代码片段的执行结果是:
6
5
37、按位与操作的优先级低于关系操作符!=
例如,为了判断1和2的按位与的结果是不是0,应该使用如下写法:
if((0x00000001&00000002)!=0)
printf("error\n");
而不能写成:
if(0x00000001&0x00000002!=0)
printf("error\n");