wait
函数作为参数
c++ .h文件里枚举的引用
Hello World
#include <stdio.h>
int main ()
{
printf("hello world \n");
}
#include <iostream.h>
using namespace std;
int main()
{
cout << "hello woeld" << endl;
}
输入输出
格式化输出
cout << “xxx” << endl;
cout << dec << i; 转换成10进制输出
cout << hex << i; 转换成16进制输出
cout << oct << i; 转换成8进制输出
cout << setprecision(3) << f<< endl;
float f = 12.3233; 输出:12.3
cout << setw(10) << f <
正常输出
整数,字符,字符串,数组,指针
cout << i << endl; int i
cout << c << endl; char c
cout << ch << endl; char ch[10]
cout << ch << endl; char *ch = (char*)malloc(sizeof(char)*10)
输入
整数:int a; cin >> a;
字符:char c;cin >> c;
字符串:char ch[10];cin >> ch;
字符串:char *ch = (char*)malloc(sizeof(char)*10);cin >> ch;
常量
整数常量
- 12(十进制)、012(8进制)、0x12a(十六进制)
- 123L/l 长整形、123U/u 无符号整形
实数常量
- 12.5
- 指数 0.4312E2 = 43.12、.4312E2、12.0 可写成 12.e2
- 12.3f 是 float 类型默认是 double 类型
字符常量
- ’a’、’B’、ASCII码表里的,一些不可显示字符可用十六进制表示
- char c = ‘a’; 十六进制 char c = ‘\x61’
字符串常量
- ”a” 后面自动加个 ‘\0’ 结尾
bool 常量
- false、true
符号常量
- const int C = 10; 声明时必须赋值
const 和 #define区别
- const int C = 10; 声明时必须赋值
变量
声明:大部分声明变量时候分配内存了,里面有一个默认的值 int a; 默认a为0
定义:定义变量一定分配完内存,a = 3
- 外部变量声明时候不分配内存
- 声明同时定义 int a = 3; int a(3);
- 没有字符串变量,只能用数组char a[10], 指针 char *a; 需要开辟内存空间
- 变量存储类型
- auto:堆栈方式分配内存空间,暂时性存储,存储空间可以被若干变量覆盖使用
- register:存放在通用寄存器中
- extern:在所有函数和程序段中都可引用
- static:在内存中以固定的地址存放,整个程序运行期间都有效
运算符与表达式
1. 算数运算符与算术表达式
符号:+、-、*、/、%、++、- -
特点:+(正号)、-(负号)、/(两个整数运算结果舍掉小数部分)、%(只能是两个整数)、++(前置后置)、–(前置后置)
例子:cout<< i++; cout<<++i;
2. 赋值运算符与赋值表达式
符号:=、+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=
特点:语法简介
例子:int a = b = c = 5; 先给 c 赋值之后是 b 。。。
3. 关系运算符与关系表达式
符号:>、>=、<、<=、==、!=
特点:是逻辑运算的一部分
例子:结果为 bool 值
4. 逻辑运算符与逻辑表达式
符号:!、&&、||
特点:优先级依次降低
例子:结果 bool 值
5. 条件运算符与条件表达式
符号: ? :
特点:相当于简单的 if(){} else {} 语句
例子:int c = a > b ? a : b; c 等于 a 和 b 中较大的
6. “,”
符号:”,”
特点:将若干表达式连接起来
例子:int a; a = 3 * 5, a * 4; 结果 不等于 60 ?
“,” 运算符级别最低
/*
1. s + 2
2. d + 4
3. 因为有(), 算 “,” 运算
4. “,” 自左到右结合,所以()里的结果是 7
5. 12 + 7
6. “=”运算
*/
int a, s, d;
s = 2;
d = 3;
a = 12 + (s + 2, d + 4);//19
cout << a << endl;
/*
1. 3 * 5
2. b * 4
3. b = 15
4. ,号运算
*/
int b = 1;
b = 3 * 5, b * 4;
cout<< b << endl;//15
7. sizeof
符号:sizeof
特点:可以得到基本或特殊类型占用内存大小
例子:int a; sizeof(a) , sizeof(int)
8. 位运算符
符号:&、|、^、~、<<、>>
特点:C/C++能对数据的二进制进行操作
例子:
- &:1 & 1 等于 1 其他为 0
- |:0 | 0等于 0 其他为 1
- ^:相同为 0,不同为 1
d = a ^ b ==> a ^ d结果b 或 b ^ d结果a
int a, b;交换位置 a = a ^ b; b = a ^ b; a = a ^ b
- ~:二进制每一位进行取反,再进行反码运算 +1
正数:源码、反码、补码都是自己
负数:源码高位是 1(符号位)、反码除符号位的每位源码取反、补码是反码加 1
正数:是源码 1 在计算机里的二进制是 0000 00001
负数:是补码 -1 在计算机里 1000 0001 取反码 1111 1110 再取补码 1111 1111,1111 1111就是 -1 在计算机里的二进制表示形式。
int i = ~3; -4
3源码0000 0100 经过~ 1111 1011在计算机里~3的二进制表示是 1111 1011是负数的补码,反推补码应该是 1111 1010,再推源码 1000 0101 就是-4
int i = ~-3; 2
同上面推到一样
- << 或 >>
2 >> 1: 2的二进制数右移 1 位
2 << 1 :2的二进制数左移 1 位
0000 0010 (2 << 1) 0000 0100 = 4
1111 1110 (-2 << 1) 1000 0100 = -4
0000 0010 (2 >> 1) 0000 0001 = 1
1111 1110 (-2 >> 1) 1000 0001 = -1
负数的二进制表示?
9. 运算符优先级
结合方向、优先级、一元还是二元运算符
p33 没太看懂
10. 数据类型隐含转换
- 二元算数和关系运算,操作数1 和 操作数2 类型要求一致转换规则
char - short - int - unsigned - long - unsigned long - float - double - 逻辑运算&&,||,!参与运算必须是 bool ,其他类型转换规则,非0转true,0转false
- 位运算只能是整数
- 赋值运算将等会右边的结果转换成左边的类型
int i = 12.3 + 4.3;
cout << i << endl; i = 16
11. 强制类型转换
- float f = 12.3; int(f) , (int) f 结果 12
- 不安全,f 精度有损失 12
- f 本身没有改变
- 函数转换
static_cast、dynamic_cast、const_cast、reinterpret_cast
数据类型
bool、char、short、int、long、float、double
void、union、enum、struct、
typedef、sizeof
char, short, int, long前面加上 unsigned
double 前可加 long
基本数据类型
char
- char s = ‘a’ 等于整数 97,%c 输出 a、%d 输出 97
- 占一个字节,ASCII -128~127, 用 %c 输出对应字符,%d输出 ASCII 对应的十进制整数,相当于整数超过127溢出。
负数范围比整数多一个???
- 例如 char 一个字节 8 位,范围-128~0,0~127
- 去掉一个符号位剩下 7 位最大, 27 0 111 1111 = 127
- 0~127是128个数字,负数转换成整数,应该是安位取反末尾加 1,1 000 0000 整数就是0,取反 0 111 1111 + 1 = 1000 0000 -128
整数范围
- 内存占字节 * 8 = x, −2x−1 ~0, 0~ 2x−1−1
16位32位
- 16 int 占 2 个字节,32 int 占 4 个字节
查看占用字节数 sizeof
特殊数据类型
1.共用体/联合体 union
union 几个不同的类型变量共用同一组内存,减少内存的开销。
例子 飞机,运输机运输燃料多少 float、轰炸机携带炸弹 int,飞机的结构体这两种类型可以用 union 以减少内存的使用。
声明使用
union Name
{
int i;
float f;
};
Name name;
name.i = 10;
name.f = 10.2;
cout << name.f << endl;
错误 union Name name;
特殊使用
1.无名联合体/共用体
union
{
int i;
float f;
};
i = 1;
f = 2.0;
cout << f << endl;
无名union的使用和其他变量一样,只是共用一块内存
例子 结构体嵌套无名联合体
struct Name
{
union
{
int i;
float f;
};
};
Name name;
name.i = 10;
cout << name.i << endl;
2.证明共用一块内存
f = 2.2;
i = 1;
cout << f << endl;
f 输出 1.4013e-45 如果后给 f 赋值可以正常输出
2. 结构体 struct
struct 不同的数据类型组成一种新的类型
例子 新的学生类型由,学号、姓名、性别等类型组成,根据需要组成自己想要的类型
声明使用
1.
struct Name
{
int i;
float f;
};
// Name name; 这种声明也行
struct Name name;
name.i = 10;
cout << name.i << endl;
2.
struct Name
{
int i;
float f;
} name;
name.i = 10;
cout << name.i << endl;
3.
struct Name
{
int i;
float f;
} name = {11, 10.2};
cout << name.i << endl;
特殊形式
结构体方法调用
3. 枚举 enum
enum 只有有限的几种可能性
例子 一场足球比赛只用胜、平、负三种可能,枚举把数字变成文字便于理解
声明使用
enum Name
{
sun, mon, tue
};
// Name name = mon; 声明也可以
enum Name name = mon;
cout << name << endl;
枚举里声明赋值必须是枚举里的
特殊形式
1.默认值
enum Name {sun, mon, tue}; 默认 0, 1, 2
enum Name {sun, mon=9, tue}; 默认 0, 9, 10
在前一个基础上加 1,默认从 0 开始
2.与整数赋值
enum Name name;
int i = 1;
// name = i; 错误
name = (Name) i;
整数必须经过强制转换后才能给枚举赋值, 枚举可以给整数赋值
3.强制转换后的整数不在枚举的范围
enum Name{ sun, mon, tue };//0, 1, 2
enum Name name;
int i = -1;
name = (Name) i;
cout << name << endl;
也能正确赋值
4.例子遍历枚举
enum game{ WIN, LOSE, TIE, CANCEL};
int count;
for(count = WIN; count <= CANCEL; count++)
{
cout << count << endl;
}
c++类里的枚举
4. 类型从命名 typedef
typedef 给类型区别名
例子 便于理解
使用声明
typedef int int16, int32;
int16 i1 = 10;
int32 i2 = 20;
语句
各种语句的嵌套使用
break、continue、return、goto、
do … while、while … do、for
if … else、switch case、switch default
1.if else
if(){};
if(){} else{};
if(){} else if(){} else{};
多种情况
2.switch
switch( n ){
case 常量1: 语句
…
default : 语句
}
- 常量1 整形,字符或枚举
- case后不能用 {}
- n 与任意一个 case 后的常量n 匹配,常量n+1, 常量n+2…后的语句都会执行,因此匹配常量n 后必须break跳出switch
- 几个case连用任何一个匹配都执行同一条语句
int i = 3;
switch(i)
{
case 1:
case 2:
cout << "2" << endl;
case 3:
cout << "3" << endl;
case 4:
cout << "4" << endl;
}
输出3,4,如果 i=1 输出 1,2,3,4
3.while语句
while(){}
do {} while();
区别 do while 不管 while 后的条件是否成立都会执行一次
4.for语句
for(1表;2表;3表){}
- 1,2,3表都能省,但 ; 不能省
- 2表没有就是死循环
- 去掉1和3表相当于while
int i;
int j;
for(i=0, j=0; i < 5; i++)
{
}
for(;;i++) 与 for(;;++i)一样
5.控制语句
- break:switch、for、while
- continue:for、while、switch不能用
- goto