- 博客(7)
- 资源 (2)
- 收藏
- 关注
原创 C语言负数转正数的隐藏缺陷
今天在写程序的时候发现了一个相当隐蔽的错误,查了好久才找到了这个缺陷,就是当我们在将一个负数变成正数的时候,一定要注意防止数据溢出。比如定义一个char型的变量a。。。。。。。。如下所示:char a;if (a{ a=-a;}printf("%d\n");这几条语句在一般情况下是不会出问题的,比如我们使变量a=-10,输出为10;然而当a=-128时,问题就出现了
2013-07-24 15:30:16 3799
原创 预处理器之宏的使用
我们知道C程序在编译过程之前,C语言预处理器首先对程序代码作了了必要的转换处理。 宏在C程序中是非常有用的,比如我们可以通过修改宏定义来修改在程序中出现的所有实例。同时通过宏定义还可以免去函数调用带来的重大系统开销。虽然宏定义非常有用,但是宏定义也是非常容易出错的。主要表现为以下几点:1、 不能忽视宏定义中 的空格比如在下面的宏定义中 #define f (x) (
2013-07-24 11:17:41 627
转载 二维数组和双重指针的转换及使用
我们在学习C语言的时候, 经常会写这样的程序:void Func1(int *p){}void Func2(int a[]){}int main(){ int a[10]; Func1(a); int *p; Func2(p);} 即一维数组与指针作为函数参数的互换使用, 我们可以一眼看出这个程序是可以通过编译的
2013-07-21 11:15:05 1643
原创 C语言结束标志分号的作用
众所周知,分号在C语言中的作用是作为一条语句结束的标识,在C程序中如果不小心多写了一个分号可能不会造成什么不良后果:这个分号也许会被视作一个不会产生任何实际效果的空语句。但是如果在if或者while语句后面紧跟一条语句时,如果此时在if或者while语句之后多加了一个分号的话,将会产生意想不到的后果。如下所示:if(a>b);a=b;该程序作者的意图本来是当a大于b时,将b的值赋给a,
2013-07-21 00:06:05 6671 1
原创 C语言运算符的优先级问题
对于学过C语言的人来说,相信对于每一个运算符我们都知道是什么意思,也能正确的运用,但是当不同的几个运算符和在一块的时候我们却发现问题接踵而至,比如下面的两条语句:if(a & b !=0)和a=b对于所有的运算符及其优先级可以用以下的两句话来概括:醋坛酸味灌味落跳福豆共44个运算符醋-初等,4个: ( ) [ ] -> 指向结构体成员 . 结构体成员坛-单目,9
2013-07-20 22:10:40 637
原创 深入理解C函数声明
通过对C语言的初步学习我们都会对变量的声明及定义相当熟悉,然而要进一步理解函数的声明以及定义指向函数的的指针变量还是有一定的难度。比如下面对fun函数的声明,我们理解起来就有一定的困难。void (*fun(int,void(*)(int)))(int);看到这样的函数声明我们都会感到无所适从,然而如果我们撩开她神秘的面纱,一步一步的分析会发现这样的函数声明也是相当有规律且很容易理解的。首
2013-07-20 21:37:55 582
原创 C陷阱与缺陷学习心得之——词法缺陷
在我们的程序中所谓的“符号”指的是程序的一个基本组成单元,其作用相当于一个句子中的单词。符号就是程序中的一个基本信息单元。而编译器的工作就是负责将程序分解为一个一个符号的部分,一般称为“词法分析器”。在C语言中,符号之间的空白(包括空格符、制表符或换行符)将被忽略,因此语句if (x > big) big = x;可以分解为if(x>big)big=
2013-07-20 19:39:45 651
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人