sizeof的执行阶段
sizeof 是编译时计算,不是执行过程中计算。
单引号与双引号
单引号(‘’):被单引号的字符为一个变量,以ASCLL形式存储,占一个字节。
双引号(“”):表示为字符串,char型,存储长度为字符串长度+1,编译器会在末尾加/0
\n \r 换行符
windows下换行实际上是 \n \r
linux下换行实际上是 \n
两系统的换行上解析不同,所以文件在交互使用时有问题。要格外小心。
windows键盘按键解析
‘\b’-退格键
‘\r\n’-回车键
continue
与break、return同类功能,比较如下:
return:跳出当前函数;
break:跳出循环,跳出for或者while;
continue:结束本轮循环,接着执行下一次循环。
man函数的形式
int main(int argc,char *argv[ ]);
argc 输入参数个数
*argv[ ] 输入参数,指针数组;
注意:参数输入是字符串类型,需要使用strcmp比较
输入多个参数时用空格间隔
要使用argv,先检查argc
void类型
void类型是不知道类型,强制转换后就有类型。
例:int *p= (int *)malloc(4);
void一般与指针配套使用;
NULL
null不是c的关键字,是一个宏定义,原型如下:
#ifdef _cplusplus
#define NULL 0 //c++语言的结果
#else
#define null (void *)0; //c的结果;定义一个指向0地址的不确定类型指针。
#endif
野指针
int *p;野指针。
int *p= NULL 即 int *p = (void *)0;//使指针指向虚拟0地址;
标准格式:
int *p = NULL;
p = xx;
if( NULL != p) //为防止两个等号写漏1个,所以NULL一般写到前面;
{
*P= xxxxxxx //解引用
}
p=NULL;
NULL、’\0’、 ‘0’、0区分
NULL是一个表达式,是将0地址强制类型转换成void,本质上是0地址,用来判断野指针;
‘\0’ 是一个转移字符,对应的ASCII码0,本质是0;用来判断字符串结束;
‘0’ 是字符0,对应的ascll码48,本质是48,用来写0字符;
0 是数字0,与ascll无关系,本质是数字0,用来比较变量是否等于0;
c的小动作
强制转换:float a=12.34;int b=(int)a;//先将a的整数部分拷贝到临时内存,再将临时内存拷贝到b,再销毁临时空间。
float a;int b=10;a=b/3; // B/3因为是int类型所以结果是3;再将3拷贝到float临时变量,再将临时变量的值拷贝到a后销毁临时变量。
顺序结构
cpu就像是火车,代码就像是铁轨,如果火车没有铁轨,就跑飞了,所以上电期间cpu必须要有代码,哪怕是死循环。
DEBUG & RELEASE版本
debug版本的软件是包含了调试信息输出的版本。占用系统资源,拖慢运行速度。
release版本是去掉了调试信息,效率高于debug版本。
两者使用的是同一套源程序,要实现需要使用debug宏,示例如下:
#ifdef debug
#define dbg() printf()
#else
#define dbug
#endif
函数带有下划线__
函数名或变量前加“_”或“__”只有在大量使用函数库的时候才会出现,目的是防止与用户函数或变量名重名,_ 就是系统自己使用的函数,__是表示是内部使用的函数,以提醒用户不要去修改,要是___(3个下划线),不得了,看都不能看了。