格式化描述串:
char %c;
short int %hd;
int %d;
long int %ld;
float %f;
double %lf;
枚举:
例 enum weekday{Mon, Tue, Wed, Thr, Fri, Sat, Sun} a, b, c;
weekday是枚举名 a, b, c是枚举变量名
总结: 1)可以代替连续的整形的宏定义,增强代码的可维护性
2)常用在switch语句
一元否定运算符
bool valid = false;
if(!valid) //双重否定,即肯定。 等同于if(valid == 0)
!valid 和valid == 0 两个表达式等价
congtinue 用于循环体内部,作用是结束本次循环,开始执行新的循环
break 用于 switch 结构,作用是跳出 switch 结构;跳出循环不在进行新的循环,执行循环体后面的语句,如果有多存循环,只跳出break所在这一循环
return 跳出当前的函数,本函数中return后面的语句不再执行
函数
函数声明 函数调用 函数定义
在(.h)里进行函数原型的声明 在.c或.cpp文件里进行函数的实现
void 空类型 用在不需要值的地方
向函数传递参数的三种方式
1)传值 2) 传地址 3)传引用
指针(8个字节)
指针也是一个变量,它的值是另外一个变量的地址,指针是存放内存地址的变量
例
char *p = &aChar
p 指针变量本身的名字 * 表示p是一个指针变量 &取地址运算符
= 把变量aChar的地址编号 赋给指针变量p
指针P 里存储的是字符变量aChar的地址编号,
char* 指针p 变量的类型,char代表指针指向的变量的类型
指针变量
值就是个地址编号
可以改变 存储一个新的地址,指向另外的变量
多个指针可以有同样的值,多个指针指向同一个变量
通过指针访问指针指向的变量
*p放在=右边 读取P只想的变量的值 *p放在=左边 给指针p指向的变量 写入内容
指针做函数的参数
传值调用:形参是实参的拷贝,改变形参后 实参值不改变
三目运算符
return(x < y ? x : y)
表达式1 ? 表达式 2: 表达式 3
若表达式1为真,则返回表达式2
若表达式1为假,则返回表达式3
开辟一个堆空间(malloc) 里面的变量只有地址
开辟例子:int*INT = (int *)malloc(sizeof(int))
最后需要手动释放(free)
变量前加 strtic 是声明为静态存储区
栈:又操作系统自动分配释放
栈:又程序员分配释放
数组
数组的名字就是数组第一个元素的内存地址,数组首地址(数组名字的值和数组的首地址值一样) 可以通过下标和指针访问数组元素
指针数组(数组中每个元素内部存放的是地址编号)
参数传递
传指针调用 传的是地址;通过形参(变量的地址编号)改变实参指向的变量的值
指针常量
变量前加上const 就变成了常量
字符串
用到时 需在头文件申明 #include "string.h"文件
\0 作为结束标志 %s 输出
常用的字符串操作函数: 比较 strcmp() 长度 strlen() 链接 strcat() 拷贝 strcpy()
结构体
typedef: 给已有的类型起一个别名
结构体访问
访问数组的某个元素 用数组下标
访问结构体的某个成员,用 . 成员访问运算符
内存分配法:找到最大字节的变量类型,一次从上往下分配内存,分配到相应类型时 所花图中数字要能整出当前类型的字节数
预处理
程序运行过程: 预编译---编译---链接---执行
宏替换
#define(最好都用大写字母)
替换函数
#define max(A, B) ((A) > (B) ? (A) : (B)) 宏替换的参数都要加上括号
除了最后大括号的结束行,其余都要加上 "\"
例:
#define exchangValue(x, y)
{
int temp = x;
x = y;
y = temp‘
}