数组
特别需要注意以下情况:
具体分析如下:
操作符
注意:取模操作符(%)
" % " 操作符只能作用于整型。
位操作符: &( 按位与)、^ (按位异或 )、| (按位或)
单目操作符
sizeof 操作数的类型长度(计算的是变量或者类型所创建的变量占据内存的大小,单位是字节。
(类型) 强制转换类型 正确的写法:int n=(int)3.14; 错误的写法:int n=int(3.14); error
~ 按位取反是对存在内存中的补码(二进制)进行取反的。
补充说明:原码 反码 补码
++( 前置++和后置++)前置++:先做加法后使用赋值 ;后置++:先使用赋值后做加法。
-- ( 前置++和后置++)前置--:先做减法后使用赋值 ;后置--:先使用赋值后做减法。
条件操作符(三目操作符)
exp1?exp2:exp3 (若exp1成立执行exp2,不成立执行exp3)作用:简化if语句。
例如: int max=(a>b?a:b); (a如果大于b执行a;否则执行b)
逗号表达式 (exp1,exp2,exp3,........expN)
逗号表达式从左向右依次进行计算,整个逗号表达式的结果是最后一个表达式的结果。
关键字 typedef (类型重命名)
具体用法如下所示:
关键字static(static是用来修饰变量和函数的)
1.修饰局部变量---静态局部变量
static修饰的静态局部变量,其实是改变了变量的存储类型(栈区存储-------->静态区存储),从而使得静态的局部变量只执行初始化一次,并且出了自己的作用域也不会被销毁,而且延迟了局部变量的生命周期,再到程序运行结束以后才释放。
对比以下两种情况,就可以更加清晰的了解static。
2.修饰全局变量---静态全局变量
全局变量默认是具有外部链接属性的,作用域是整一个工程,在一个文件内定义的全局变量,在另一个文件中,通过extern全局变量声明就可以使用全局变量,但是用static修饰全局变量后,就变成了内部链接属性,这个全局变量的作用域就变成了声明此变量所在的文件里,其他文件即使使用extern声明也不能使用。
3.修饰函数--静态函数
函数本身也是具有外部链接属性的,用static修饰一个函数后,就变成了内部链接属性,使得这个函数只能在自己所在的文件中被调用,不能被其他文件调用。
注:static修饰的变量存放在全局数据区的静态变量区,包括全局静态变量和局部静态变量,都在全局数据区,初始化的时候自动初始化为0。考虑使用static修饰的情况一般有:不想被释放的时候或者考虑到数据的安全性的时候。
宏
宏的定义:#define 宏名 宏体 (宏体可以是数字、表达式、函数、if语句等)
结尾不需要加分号,如果加了分号会一起被替换!宏定义必须写在函数之外,如果要终止其作用域用 #undef 宏名 命令,在之后的代码将不会在被使用。宏名若被引号修饰,则程序处理不会被宏代替。宏名通常使用大写。
例如:
#define M 10
#define N (n*n) //在编写代码时,所有出现(n*n)的地方都可以用N来表示。
#define ADD(x,y) ((x)+(y)) //宏体是函数(一个加法函数)
指针 (简单了解指针)
内存:存储器,计算机中的程序运行都是在内存中进行的,每一个内存单元是1个字节。
在编译代码时,创建变量就会在内存中开辟空间,因此每一个变量就会有与之对应的地址,而我们想要通过地址间接的访问这个变量的值,就需要得到这个地址。
所以我们就需要创建一个变量来存这个地址,通过操作符"& (取地址)"可以取得变量的地址,然后存进去这个变量中,所以这个变量存储的是地址,我们就叫这个变量为指针变量。然后再通过操作符" * (解引用) "来获得地址对应变量的值。(简单的描述)
具体代码如下:
结构体
访问结构体的两种方式
1.(结构体变量.结构体成员)
2.(结构体指针->结构体成员)
具体代码如下: