c语言深度解剖笔记1

2016.8.14 DAGE

复习内容:c语言深度解剖笔记1

a.c语言运算符的优先级

有三大类:算术运算符、关系运算符与逻辑运算符,还有位运算符等,,,
相同优先级运算符,从左至右依次运算。注意后缀运算优先级高于前缀。因此++i++应解释为++(i++)。

基本表达式 1级 最高
后缀表达式 2极
单目/一元运算 3级
强制类型表达式 4级
乘法表达式 5级
加法运算符 6级
移位运算符 7级
关系运算符 8级
相等运算符 9级
位与运算符 10级
位异或运算符 11级
位或运算符 12级
逻辑与运算符 13级
逻辑或运算符 14级
三元条件运算符 15级
赋值运算符 16级
逗号运算符 17级

结合性:
    1.C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。
    例如算术运算符的结合性是自左至右,即先左后右。
    最典型的右结合性运算符是赋值运算符。
    2.右结合性:否定!,按位取反~,++,--,+,-,*,&,强制类型转换,sizeof,问号表达式?:,赋值:*=,+=,-=,/=,>>=,&=...
    3.所有的优先级中,只有三个优先级是从右至左结合的,它们是单目运算符、条件运算符、赋值运算符。其它的都是从左至右结合。

b.判断

1.if-else
    在编写代码是,要使得正常情况的执行代码清晰,确认那些不常发生的异常情况处理
    代码不会遮掩正常的执行路径。这样对于代码的可读性和性能都很重要。
    非常重要的一点是,把正常情况的处理放在 if 后面,而不要放在 else 后面。
2.switch
    case 后面只能是整型或字符型的常量或常量表达式(枚举类型好像也可以)

c.循环

1.break和continue
    break表示终止本层循环。      
    continue 表示终止本次(本轮)循环。当代码执行到 continue 时,本轮循环终止,进入下一轮循环。
    注意switch可以使用break但是不能使用continue
2.使用循环需要注意
    在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少 CPU 跨切循环层的次数。
    把循环嵌套控制在 3 层以内。

d.函数返回值

如果一个函数没有规定返回值的类型,void,int,float等,那么会默认为int型
若函数不接受任何参数,一定要指明参数为 void。
return 用来终止一个函数并返回其后面跟着的值。
return 语句不可返回指向“栈内存”的“指针”,因为该内存在函数体结束时被自动销毁。

e.const

const定义的与define定义的变量的区别:
const定义的变量const int a = 100(这时没有给a分配内存);在给别的变量进行赋值时,int b = a;(这时给a分配内存,以后不再分配)
如int c = a;此时不再分配
define定义的宏常量#define M 3,在程序里面如果int a = M;和int b = M;在程序的预编译时会进行宏替换,每次使用分配内存
#define宏没有类型,const定义的只读变量具有特定的类型

const定义的变量是只读变量,存放在静态区。

const int 与 int const等价,后面可以是变量或者数组,看下面的指针也可以
const修饰指针:
const int *p;       // p 可变,p 指向的对象不可变  //const 修饰*p,p 是指针,*p 是指针指向的对象,不可变
int const *p;       // p 可变,p 指向的对象不可变  //const 修饰*p,p 是指针,*p 是指针指向的对象,不可变
int *const p;       // p 不可变,p 指向的对象可变  //const 修饰 p,p 不可变,p 指向的对象可变
const int *const p;     //指针 p 和 p 指向的对象都不可变    //前一个 const 修饰*p,后一个 const 修饰 p,指针 p 和 p 指向的对象都不可变

判断方法:先忽略类型名(编译器解析的时候也是忽略类型名),我们看 const 离哪个近。离谁近就修饰谁。

const也可以修饰函数传的参数,表示参数不可改变

const用时表示的是定义的变量或者地址变量什么的不可以被修改,但是不代表(如果这个地址变量不能被更改,并且这个地址指向的对象不能更改,)这个地址指向的那块就没有办法修改了。比如:
    int i = 10;
    const int *p = &i;
    *p = 100;   //error
    i = 100;    //true
    这时*p = 100

f.extern声明

extern 可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中。
extern 在声明变量时不能为其赋值,在声明变量时变量的类型不能改变,int a = 100;extern double a;就会报错

g.struct结构体

它将一些相关联的数据打包成一个整体,方便使用。
有的说一个空的结构体大小是1,但我测试出来是0……

ps:柔性数组:结构中的最后一个元素允许是未知大小的数组,这就叫做柔性数组成员,但结构中的柔性数组成员前面必须至少一个其他成员。
柔性数组成员允许结构中包含一个大小可变的数组。sizeof 返回的这种结构大小不包括柔性数组的内存。包含柔性数组成员的结构用
malloc ()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值