C深度解剖笔记(1)

register:
register变量可能不存放在内存中,所以不能用&来获取它的地址

static:
1.静态全局变量:作用于仅限于变量被定义的文件中,其他文件用extern也没法使用它
2.静态局部变量:函数运行结束,静态变量值也不会销毁,下次进入函数仍能用到原来的值
3.静态函数:函数的作用于仅局限于本文件

基本数据类型:short、int、long、char、float、double
1.不同类型数据相加时,由低精度向高精度转化
2.signed与unsigned进行运算时把signed转化成unsigned来运算
3.为了增加程序的可读性,不要混用char和unsigned char,前者定义字符类型,后者定义数值类型

signed char:
	int main()
	{
		signed char a[1000];
		int i;
	
	for(i = 0; i < 1000; i++)
	{
		a[i] = -1-i;
	}
	printf("%d", strlen(a));
	
	return 0;
}
strlen(a)的长度不是1000而是255。-1二进制为11111111(1字节),不断减1直到-128,即10000000,
再减1为127,即01111111,继续减1直到0,所以第a[255] = 0,而strlen函数计算长度时,
计算的是到'\0'之前的长度,所以a[256]及以后的被截断,无法计入长度。

变量的命名规则:
1.不能以数字开头
2.函数名禁止被用于其他地方
3.宏定义,枚举常数,只读变量,尽量用大写字母命名
4.变量赋值时,禁止用0开头,因为会被计算机认为是八进制格式的数

float变量与0进行比较:
float fTestVal = 0.0;
if((fTestVal >= -EPSINON) && (fTestVal <= EPSINON));//EPSINON为定义好的精度

bool变量:
1.boo1变量与零值比较:
(1)if(bTestFlag == 0) if(bTestFlag == 1)
会让人误会成整型变量,所以这种写法不好
(2)if(bTestFlag == TRUE) if(bTestFlag == FLASE)
FLASE在编译器里的值是0,但是有些编译器吧TRUE的值定义为-1,所以偶尔会出错
(3)if(bTestFlag) if(!bTestFlag)
比较好的写法

2.如果bool值表达式需要赋值操作,那么赋值操作必须在操作数之外分别进行,以避免“=”和“==”的混淆
	x = y;
	if(x != 0)
	{
		foo();
	}
	
	不要写成:if((x = y) != 0)

switch:
1.case的结尾不要忘记加break!不要忘记加break!不要忘记加break!
2.即使程序不需要default,也该保留default:break;的语句
3.尽量把出现频率高的情况放前面,低的放后面

循环语句:
1.break是跳出一层循环,continue是结束当前循环的当前轮次,进入下一轮次
2.多层循环嵌套时,把长的循环放内层,以减少CPU跨切循环层的次数。
3.尽量使用半开半闭区间写法,即n < 10而非n <= 9
4.不要在for循环体内修改循环变量,防止循环失控
5.for语句的控制表达式不能包含任何浮点类型的对象,因为舍入误差和截取误差会通过循环的迭代传播(以讹传讹)

const:
1.定义const只读变量,具有不可变性。
2.const修饰的只读变量必须在定义时初始化

volatile:
用它修饰的变量表示可以被某些编译器未知的因素更改,遇到这个关键字声明的变量,编译器对访问改变了的代码不再进行优化,从而提供对特殊地址的稳定访问

extern:
变量声明,表明变量或函数的定义在别的文件中

struct与class:
1.struct成员默认是public。而class的成员默认是private
2.C语言中struct中无法放函数,C++可以

union:
用法类似于struct,所有数据成员具有相同的起始地址,可用来测试大端小端

enum:
第一个开始往后,从0依次+1,可对其中枚举常量进行赋值,后一位是前一位+1

typedef:
typedef并不是定义新的数据类型,而是为已存在的数据类型进行重命名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值