CPP基础1

来源:互联网 发布:读懂php wsdl中方法 编辑:程序博客网 时间:2024/04/29 05:48

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;


常量

  1. 整数常量

    • 12(十进制)、012(8进制)、0x12a(十六进制)
    • 123L/l 长整形、123U/u 无符号整形
  2. 实数常量

    • 12.5
    • 指数 0.4312E2 = 43.12、.4312E2、12.0 可写成 12.e2
    • 12.3f 是 float 类型默认是 double 类型
  3. 字符常量

    • ’a’、’B’、ASCII码表里的,一些不可显示字符可用十六进制表示
    • char c = ‘a’; 十六进制 char c = ‘\x61’
  4. 字符串常量

    • ”a” 后面自动加个 ‘\0’ 结尾
  5. bool 常量

    • false、true
  6. 符号常量

    • const int C = 10; 声明时必须赋值
      const 和 #define区别

变量

声明:大部分声明变量时候分配内存了,里面有一个默认的值 int a; 默认a为0
定义:定义变量一定分配完内存,a = 3

  1. 外部变量声明时候不分配内存
  2. 声明同时定义 int a = 3; int a(3);
  3. 没有字符串变量,只能用数组char a[10], 指针 char *a; 需要开辟内存空间
  4. 变量存储类型
    • 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);//19cout << 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. 二元算数和关系运算,操作数1 和 操作数2 类型要求一致转换规则
    char - short - int - unsigned - long - unsigned long - float - double
  2. 逻辑运算&&,||,!参与运算必须是 bool ,其他类型转换规则,非0转true,0转false
  3. 位运算只能是整数
  4. 赋值运算将等会右边的结果转换成左边的类型
    int i = 12.3 + 4.3;
    cout << i << endl; i = 16

11. 强制类型转换

  1. float f = 12.3; int(f) , (int) f 结果 12
    • 不安全,f 精度有损失 12
    • f 本身没有改变
  2. 函数转换
    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

基本数据类型

  1. char

    • char s = ‘a’ 等于整数 97,%c 输出 a、%d 输出 97
    • 占一个字节,ASCII -128~127, 用 %c 输出对应字符,%d输出 ASCII 对应的十进制整数,相当于整数超过127溢出。
  2. 负数范围比整数多一个???

    • 例如 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
  3. 整数范围

    • 内存占字节 * 8 = x, 2x1~0, 0~2x11
  4. 16位32位

    • 16 int 占 2 个字节,32 int 占 4 个字节
  5. 查看占用字节数 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, 2enum 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. 常量1 整形,字符或枚举
  2. case后不能用 {}
  3. n 与任意一个 case 后的常量n 匹配,常量n+1, 常量n+2…后的语句都会执行,因此匹配常量n 后必须break跳出switch
  4. 几个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. 1,2,3表都能省,但 ; 不能省
  2. 2表没有就是死循环
  3. 去掉1和3表相当于while
int i;int j;for(i=0, j=0; i < 5; i++){}

for(;;i++) 与 for(;;++i)一样

5.控制语句

  1. break:switch、for、while
  2. continue:for、while、switch不能用
  3. goto

关键字

其他

0 0
原创粉丝点击