220223_C++_语法整理_最最最最最入门阶段(至指针前)


220223_C++_语法整理_最最最最最入门阶段(至指针前)


C++的基础语法入门笔记。
来源是runnoob的菜鸟教程等网络资料。
绝非原创,仅作自学自查之用。

目录
  • 220223_C++_语法整理_最最最最最入门阶段(至指针前)
    • 目录
      • Hello,World!
        • 入门常识
        • 数据类型
          • 计算机信息量单位
          • 不同数据类型
        • 定义变量
        • 定义常量
        • 字符与字符串
          • ASCII码表
          • 转义字符
        • 输入与输出
        • 运算符
        • 三种结构
          • 1. 顺序结构
          • 2. 选择结构
          • 3. 循环结构
            • while
            • do{...} while(...)
            • for
          • 跳转语句
            • break
            • continue
            • goto
        • 数组
          • 定义数组
        • 函数
        • 变量作用域
            • 局部变量
            • 全局变量

    Hello,World!

    #include 
    // 包含了头文件 
    // 头文件包含了程序中必需的或有用的信息
    
    using namespace std;
    // 告诉编译器使用 std 命名空间。
    
    // main()是主函数,程序从这里开始执行。
    int main()
    {
        cout << "Hello, world!" << endl;
    	// 会在屏幕上显示消息 "Hello World".
    	
        return 0;
    	// 终止 main( )函数,并向调用进程返回值 0。
    }
    

    输出:

    Hello, world!
    

    ① 上面这段程序中,包含了头文件 。
    头文件包含了程序中必需的或有用的信息。


    入门常识

    • 分号

      • 分号是语句结束符,每个语句必须以分号结束。它表明一个逻辑实体的结束。
        C++ 不以行末作为结束符的标识,因此,可以在一行上放置多个语句。
    • 语句块

      • 语句块是一组使用大括号括起来的按逻辑连接的语句。
    • 关键字(保留字)

      • 这些关键字不能作为常量名、变量名或其他标识符名称。

      • asm const else friend new short this unsigned
        auto const_cast enum goto operator signed throw using
        bool continue explicit if private sizeof true virtual
        break default export inline protected static try void
        case delete extern int public static_cast typedef volatile
        catch do false long register struct typeid wchar_t
        char double float mutable reinterpret_cast switch typename while
        class dynamic_cast for namespace return template union
    • 三字符组

      • 三字符组与双字符组是程序设计语言(如C语言)中3个或者2个字符的序列,在编译器预扫描源程序时被替换为单个字符。以解决某些键盘不能输入某些编程必须的字符问题。

      • 三字符组 ??= ??/ ??' ??( ??) ??! ??< ??> ??-
        替换 # \ ^ [ ] | { } ~
    • 注释

      • 单行//
      • 多行/* xxxxxxx */

    数据类型

    计算机信息量单位

    11010100:一个8位(8-bit)二进制数、占一字节(Byte)。

    字通常由几个字节构成。
    例如286微机的字由2个字节组成,它的字长为16位;
    486微机的字由4个节组成,它的字长为32位。

    1 Byte(B)= 8 bit
    1 Kilo Byte(KB) = 1024B
    1 Mega Byte(MB) = 1024 KB
    1 Giga Byte (GB)= 1024 MB
    1 Tera Byte(TB)= 1024 GB
    1 Peta Byte(PB) = 1024 TB

    不同数据类型

    类型 位 范围
    char 1 个字节 -128 到 127 或者 0 到 255
    unsigned char 1 个字节 0 到 255
    signed char 1 个字节 -128 到 127
    int 4 个字节 -2147483648 到 2147483647
    unsigned int 4 个字节 0 到 4294967295
    signed int 4 个字节 -2147483648 到 2147483647
    short int 2 个字节 -32768 到 32767
    unsigned short int 2 个字节 0 到 65,535
    signed short int 2 个字节 -32768 到 32767
    long int 8 个字节 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
    signed long int 8 个字节 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
    unsigned long int 8 个字节 0 到 18,446,744,073,709,551,615
    float 4 个字节 精度型占4个字节(32位)内存空间,+/- 3.4e +/- 38 (~7 个数字)
    double 8 个字节 双精度型占8 个字节(64位)内存空间,+/- 1.7e +/- 308 (~15 个数字)
    long double 16 个字节 长双精度型 16 个字节(128位)内存空间,可提供18-19位有效数字。
    wchar_t 2 或 4 个字节 1 个宽字符
    类型 描述
    bool 存储值 true 或 false。
    char 通常是一个字符(八位)。这是一个整数类型。
    int 对机器而言,整数的最自然的大小。
    float 单精度浮点值。单精度是这样的格式,1位符号,8位指数,23位小数。 2^23 = 8388608,一共七位,这意味着最多能有7位有效数字。
    double 双精度浮点值。双精度是1位符号,11位指数,52位小数。2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。
    void 表示类型的缺失。
    wchar_t 宽字符类型。
    \\ 运用类似的代码可以查询不同数据类型的占用空间与数据范围
    \\ 以bool型为例
    cout << "bool: \t\t" << "所占字节数:" << sizeof(bool);
    cout << "\t最大值:" << (numeric_limits::max)();
    

    定义变量

    数据类型 变量名 = 初始值;

    int a = 1;
    cout << a << endl;
    

    定义常量

    ①#define 宏常量

    #include  
    #define aaa 7
    
    using namespace std;
    
    int main()
    {
        cout << "aaa=" << aaa << endl;
        return 0;
    }
    

    ②const 修饰变量

    const int aaa = 2;
    

    这两者本质上是不同的。

    简单来说,#define是不带类型的立即数(不在内存,也不在寄存器,而是在内嵌在指令中的操作数),没有类型检查,会导致一些计算错误。


    字符与字符串

    字符型变量char用于显示单个字符,用单引号 ' ' 引起。
    字符串型变量string用于显示单个字符,用双引号 " " 引起。

    char a = '2';
    char s2[] = "123141241";
    string s = "12aaaaasdasdaaaa3";
    

    ASCII码表

    ASCII值 控制字符 ASCII值 字符 ASCII值 字符 ASCII值 字符
    0 NUT 32 (space) 64 @ 96 、
    1 SOH 33 ! 65 A 97 a
    2 STX 34 " 66 B 98 b
    3 ETX 35 # 67 C 99 c
    4 EOT 36 $ 68 D 100 d
    5 ENQ 37 % 69 E 101 e
    6 ACK 38 & 70 F 102 f
    7 BEL 39 , 71 G 103 g
    8 BS 40 ( 72 H 104 h
    9 HT 41 ) 73 I 105 i
    10 LF 42 * 74 J 106 j
    11 VT 43 + 75 K 107 k
    12 FF 44 , 76 L 108 l
    13 CR 45 - 77 M 109 m
    14 SO 46 . 78 N 110 n
    15 SI 47 / 79 O 111 o
    16 DLE 48 0 80 P 112 p
    17 DCI 49 1 81 Q 113 q
    18 DC2 50 2 82 R 114 r
    19 DC3 51 3 83 S 115 s
    20 DC4 52 4 84 T 116 t
    21 NAK 53 5 85 U 117 u
    22 SYN 54 6 86 V 118 v
    23 TB 55 7 87 W 119 w
    24 CAN 56 8 88 X 120 x
    25 EM 57 9 89 Y 121 y
    26 SUB 58 : 90 Z 122 z
    27 ESC 59 ; 91 [ 123 {
    28 FS 60 < 92 / 124 |
    29 GS 61 = 93 ] 125 }
    30 RS 62 > 94 ^ 126 `
    31 US 63 ? 95 _ 127 DEL
    // 强制转换char类型至int,查看ASCII值
    #include  
    using namespace std;
    int main()
    {
        char a = '1';
        cout << (int)a << endl;
        return 0;
    }
    

    转义字符

    表示一些不能显示出来的ASCII字符。

    转义字符 含义 ASCII码值(十进制)
    \a 警报 007
    \b 退格(BS) ,将当前位置移到前一列 008
    \f 换页(FF),将当前位置移到下页开头 012
    \n 换行(LF) ,将当前位置移到下一行开头 010
    \r 回车(CR) ,将当前位置移到本行开头 013
    \t **水平制表(HT) (跳到下一个TAB位置) 009
    \v 垂直制表(VT) 011
    \\ 代表一个反斜线字符"" 092
    ' 代表一个单引号(撇号)字符 039
    " 代表一个双引号字符 034
    ? 代表一个问号 063
    \0 数字0 000
    \ddd 8进制转义字符,d范围0~7 3位8进制
    \xhh 16进制转义字符,h范围09,af,A~F 3位16进制

    输入与输出

    这里只简单举几个例子。

    ① cout cin

    C++ 库定义了大量的类(Class),cout 和 cin 就分别是 ostream和 istream 类的对象,
    由标准库的开发者提前创建好的,可以直接拿来使用。
    使用cin与cout需要包含头文件iostream。
    cout和cin是ostream和istream的对象

    使用 cout 进行输出时需要紧跟<<运算符,使用 cin 进行输入时需要紧跟>>运算符
    其中endl表示换行,与C语言里的\n作用相同

    #include  
    using namespace std;
    
    int main()
    {
        int x;
        float y;
        cout << "Please input an int number:" << endl;
        cin >> x;
    
        return 0;
    }
    

    ② printf scanf

    #include  
    using namespace std;
    
    int main()
    {
    	int a;
    	scanf("%d",&a);
    	printf("a=%d\n",a);
    
    	
    	float b;
    	scanf("%f",&b);
    	printf("b=%f\n",b);
    	
    	double c;
    	scanf("%lf",&c);
    	printf("c=%lf\n",c);
    	printf("c=%3.5lf\n",c);
    	
        return 0;
    }
    
    // 输入11
    // 12345678912345678900000
    // 123456789.123456791
    
    // a=11
    // b=12345679377913908035584.000000
    // c=123456789.123457
    // c=123456789.12346
    
    

    运算符

    运算符类型 作用
    算术运算符 用于处理四则运算 + - * / % ++ --
    赋值运算符 用于将表达式的值赋给变量 = += -= *= /= %=
    比较运算符 用于表达式的比较,并返回一个真值或假值 == != < > <= >=
    逻辑运算符 用于根据表达式的值返回真值或假值 ! && ||

    三种结构

    1. 顺序结构

    没啥可说的。

    2. 选择结构

    语句 描述
    if 语句 一个 if 语句 由一个布尔表达式后跟一个或多个语句组成。
    if...else 语句 一个 if 语句 后可跟一个可选的 else 语句,else 语句在布尔表达式为假时执行。
    嵌套 if 语句 您可以在一个 if 或 else if 语句内使用另一个 if 或 else if 语句。
    switch 语句 一个 switch 语句允许测试一个变量等于多个值时的情况。
    嵌套 switch 语句 您可以在一个 switch 语句内使用另一个 switch 语句。
    if(boolean_expression)
    { }
    else
    { }
    
    #include 
    using namespace std;
     
    int main ()
    {
        char grade;
        cout << "Please input an int number:" << endl;
        cin >> grade;
        
       switch(grade)
       {
       case 'A' :
          cout << "很棒!" << endl; 
          break;
       case 'B' :
          cout << "还行" << endl;
       case 'C' :
          cout << "不太好" << endl;
          break;
       default :
          cout << "无效的成绩" << endl;
       }
       cout << "您的成绩是 " << grade << endl;
     
       return 0;
    }
    
    // 输入1
    // Please input an int number:
    // 无效的成绩
    // 您的成绩是 1
    
    // 输入A
    // Please input an int number:
    // 很棒!
    // 您的成绩是 A
    
    

    3. 循环结构

    while
    while()
    {}
    
    do{...} while(...)
    do
    {....
    } while
    
    for
    for(int i = 0; 条件; 末尾循环体)
    {
    循环语句;
    }
    

    跳转语句

    break

    跳出选择结构与循环结构。

    break;
    
    continue
    continue;
    

    跳过本次循环,进入下一次循环。

    goto

    无条件跳转语句。

    goto FLAG
    
    .......
    
    FLAG:
    ......
    
    

    建议少用goto。


    数组

    定义数组

    C当中,数组从0开始编号。

    一维数组

    int a[10];
    
    //利用下标赋值
    a[0] = 100;
    a[1] = 99;
    a[2] = 85;
    
    //利用下标输出
    cout << score[0] << endl;
    cout << score[1] << endl;
    cout << score[2] << endl;
    
    #include 
    using namespace std;
    
    int main()
    {
    
        int a[4] = { 10, 2,}; // 这里也可写a[] = {xx,xx,xx,xx}
    
        for (int i = 0; i < 5; i++)
        {
            cout <<"序号 "<

    二维数组

    #include 
    using namespace std;
    
    int main()
    {
        int a[3][2] = 
        {
            {1,2},
            {11,22},
            {111,222}
        };
    //当然可以一个个赋值
    
        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j < 2; j++)
            {
                cout << j << "行" << i << "列 " << a[i][j] << "\t";
            }
            cout << endl;
        }
    
        cout << "二维数组内存字节数: " << sizeof(a) << endl;
        cout << "二维数组一行内存字节数: " << sizeof(a[0]) << endl;
        cout << "二维数组元素内存字节数: " << sizeof(a[0][0]) << endl;
        cout << "二维数组首地址:" << a << endl;
        cout << "二维数组第一行地址:" << a[0] << endl;
        cout << "二维数组第二行地址:" << a[1] << endl;
        cout << "二维数组第二行地址:" << a[2] << endl;
        cout << "二维数组第一个元素地址:" << &arr[0][0] << endl;
        cout << "二维数组第二个元素地址:" << &arr[0][1] << endl;
    
        system("pause");
        return 0;
    }
    
    //0行0列 1        1行0列 2
    //0行1列 11       1行1列 22
    //0行2列 111      1行2列 222
    

    函数

    返回值类型 函数名 (参数列表)
    {
       函数体语句
       return表达式
    }
    ---------------------
    举例:求和函数
    #include 
    using namespace std;
    
    int add(int num1, int num2)
    {
        int sum = num1 + num2;
        return sum;
    }
    
    int main()
    {
        int a = 1;
        int b = 2;
        
        cout << "sum = " <
    using namespace std;
    
    void swap(int num1, int num2)
    {
        cout << "交换前:" << endl;
        cout << "num1 = " << num1 << endl;
        cout << "num2 = " << num2 << endl;
        int temp = num1;
        num1 = num2;
        num2 = temp;
        cout << "交换后:" << endl;
        cout << "num1 = " << num1 << endl;
        cout << "num2 = " << num2 << endl;
        //return ; 当函数声明时候,不需要返回值,可以不写return
    }
    
    int main()
    {
        int a = 1;
        int b = 2;
    
        swap(a, b);
    
        system("pause");
        return 0;
    }
    

    函数常见的形式:① 无参数无返会值;② 有参数无返会值;③ 无参数有返会值;④ 有参数有返会值。

    c++中,常见的分文件使用函数:

    1. 创建后缀名为.h的头文件
    2. 创建后缀名为.cpp的源文件
    3. 在头文件中写函数的声明
    4. 在源文件中写函数的定义
    //swap.h文件
    #include
    using namespace std;
    //实现两个数字交换的函数声明
    void swap(int a, int b);
    
    //swap.cpp文件
    #include "swap.h"
    void swap(int a, int b)
    {
    int temp = a;
    a = b;
    b = temp;
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    }
    

    变量作用域

    局部变量

    在函数或一个代码块内部声明的变量,称为局部变量。它们只能被函数内部或者代码块内部的语句使用。

    全局变量

    在所有函数外部定义的变量(通常是在程序的头部),称为全局变量。全局变量的值在程序的整个生命周期内都是有效的。

    全局变量可以被任何函数访问。也就是说,全局变量一旦声明,在整个程序中都是可用的。