C语言学习小结一
时间:2010-04-26 来源:zhaodezhong
第二阶段的学习又在紧张的进行着,虽然C语言以前也学过,自认为还学得可以,不过经过这段时间的学习还是很有很大提高的,这是我学习的一点总结,主要是为了激励自己学习,告诫自己以后不范同样的问题。有的可能理解的还不到位,请哪位高手看了多多指教!
1、 在使用scanf函数做输入时,要对输入做合法性检测。
2、 多行注释符是不可以嵌套使用的。
3、 += -= 等符合运算符之间是不允许用空格的。
4、 getchar()函数在多次使用时,会读入上次输入时的回车键,很麻烦,可以用scanf()来替代。
5、 在使用((c = getchar())!=EOF)判断语句时,要把c定义成int型而不是char型,这里不把它定义成char型,是因为它必须足够大,除了能存储任何可能的字符外还要存储文件结束符EOF。因此,我们把c声明成int类型。
6、 if(表达式1)
{//该花括号不能省,如果第一个if与else配对的话!
if(表达式2)
if(表达式3)
{
。。。。。。
}
}
else
{
。。。。。
}
7、条件?表达式1:表达式2
当表达式1为printf语句时,不能在其后面加分号,当然了其他语句也不加;在表达式2后如果是语句的话就要加分号。
8、 求余时除数是不能为零的!
9、 srand(time(NULL))
rand();
再包含它们的头文件math.h和stdlib.h就可以产生一个随机数了。
10、右移中带符号位的右移,移入0的逻辑右移,移入1的为算术右移,注意在编程的过程中对相应位做屏蔽,以避免算术右移造成的程序逻辑错误。位段在单片机和ARM中有用。
11、数组元素的多种表示方法:a[ i ] *(a+i) *p++ *(p + i)
12、strlen()函数得到的是字符串的真实长度,就是不包括’\0’字符。
13、嵌入式中函数命名用小写的动词+名词,有便于理解!
14、函数形参的声明(int x,y)是违法的
15、在编写递归函数时必须有递归退出的条件!
16、static修饰符
在函数内部变量声明时加static修饰符表示,该变量的值改变后不会释放,与全局变量有点相似。
在外部变量名和函数名前加static修饰符的目的是表明该变量或函数只能在当前文件中使用,其他文件对它们是不可见的。
17、#define you_int int*
you_int a,b;
typedefine int* you_int;
your_int a,b;
首先注意两者的语法区别,前者后不要分号,后者是需要分号的。其次,前者只是简单替换,使得a为整型指针,b为整形;而后者是用新的类型名替换已有的类型名,a、b都是整型指针。这两点在使用时要务必注意!
18、scanf(“%d”,&n);这个语句的格式很严格,引号里面最好不要加其他的东西,如空格、\n或其他字符,以免带来不必要的麻烦,另一个参数必须为指针,否则在GCC中会产生段错误!
19、if(flag = =0) 非标准,也非专业,虽然没错
if(!flag)或if(flag) 这样才专业点,呵呵
对于指针if(p = =NULL)
对于float类型if(x <E),其中E是给定的一个误差范围,如E=0.000001,这是浮点数在计算机中存储的特性决定的。
有时候为避免把”= =”写成”=”常写成if(0 = = x),让编译器去处理吧!
20、getchar()和scanf()在输入字符串时,由getchar()输入的字符串中可以有空格,但scanf()会只会读入第一个空格前的字符,这一点不注意的话有时候会的不到正确结果。