C语言细节

宏定义中使用常量后缀节约空间

#define PI 3.14f	//默认时double,加上f声明为float

const 修饰时候的顺序

const int* a;//a指向的值是不可以修改的,但是a的值可以修改
int* const a;//a指向的值可以修改,但是a的值不可以修改

当无符号和有符号类型操作时,有符号类型会转换为无符号类型

unsigned int a=-10;
int b=10;
a>b?printf("a>b"):printf("a<b");//因为负数转换为无符号,会变成一个大的整数,所以打印出a>b

兼容机器的位数

unsigned int stanard_use=~0;
unsigned int irregular_use=0xffff;//16位机器这样没问题,但是别的位数就是错的

typedef优于define之处体现

typedef int* intptr_ty;
#define int* intptr_de

intptr_ty a,b;//a,b都是int类型指针,因为a,b都是intptr_ty类型
intptr_de c,d;//define展开后,只有c是指针,d是int类型变量

C语言中的运算符优先级

默认优先级都是从左到右的
从右到左的有:
> 单目运算符
	eg:*p++//等同于*(p++)
> 三目运算符
	eg:c=b?a:b

volatile

用途场景:
1. 宏定义寄存器地址的修饰
2. 中断子程序中非自动变量static静态变量和全局变量,自动变量就是普通局部变量
3. 多线程应用同一变量时候

系统大端小端

小端:数据**低位**放在低地址处
大端:数据高位放在低地址处
判断方式:
1. 定义一个int和char,把int赋值后取地址强制转换为char检查得到的char是高八位还是低八位
2. 利用联合体的特性,联合体里同样定义char和int型

关于for循环

for(order_1;order_2;order_4)
{
	order_3;
}//执行顺序为数字顺序
为了证明可以写下面一段进行测试
eg:
int i=2;
for(i--;printf("%d\n",i),i>0;i--)
{
	printf("execute order test~");
}
//结果
1
execute order test~
0

这里还要说明的两点是:
1. 在for循环里使用的初始化i--,是单独一条语句,在这里面接下来的使用,i是实实在在的减少了1,不需考虑先使用再减
2. for循环的条件表达式,可以复杂一些,一般以下三种情况:
> for(;a,b;),此种以b为最后的判断条件,如上所写
> for(;a&&b;),同普通程序里一样,a,b有一个条件不满足就结束
> for(;a||b;),同普通程序一样,a,b只要有一个条件满足,就接着运行
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值