博客
关于我
7-C++的编程模块
阅读量:799 次
发布时间:2023-04-15

本文共 2115 字,大约阅读时间需要 7 分钟。

C++ 编程模块

数组与指针

在 C++ 中,数组和指针概念密切相关。以下几点需要注意:

  • 数组与指针的等价性

    在函数头或原型参数中,int arr[] 等价于 int *arr。这意味着数组名可以被视为指针,且数组名解释为第一个元素的地址。

  • 数组元素访问

    arr[i] 等价于 *(arr + i),这表明数组是按值访问的。

  • 数组地址与指针

    &arr[i] 等价于 arr + i。当以数组形式传递或以指针形式传递时,可以节省复制和拷贝的时间及空间开销。

  • 优缺点对比

    • 优点:节省时间和空间开销。
    • 缺点:原始数据易于被破坏。
  • 数组大小传递

    为了明确传递数组的大小,建议使用两个参数:void filer(int arr[], int size)void file(int arr[size]) 更优。


  • const 与指针

    const 关键字在指针中有两种主要用法:

  • 指针指向常量

    当指针指向一个常量时,防止该指针修改所指向的值。例如:

    const int age = 30;  
    const int * pt = &age;

    此时,pt 可以指向 age,但不能修改 age 的值。

  • 指针本身声明为常量

    指针声明为 const 时,防止指针指向的值发生变化。例如:

    int sloth = 3;  
    const int * ps = &sloth; // 指针指向常量
    int * const finger = &sloth; // 常数指针,指向整数

    这两种声明方式都能避免不经意修改数据所引发的错误。


  • function 与二维数组

    二维数组的声明与使用

    二维数组的声明方式有多种:

  • 使用大小和元素类型

    int (*arr)[4];  // 可变大小,指向数组的指针  
    int arr[4][3]; // 固定大小的二维数组

    或者使用隐含大小:

    int data[3][4] = {  
    {1, 2, 3, 4},
    {9, 8, 7, 6},
    {2, 4, 6, 8}
    };
  • 二维数组的访问

    • arr[r][c] 访问第 r 行第 c 列的元素。
    • * (arr + r) + c*(arr[r][c]) 也可实现相同效果。

  • function 与 c 风格字符串

    C++ 中,字符串的名字表示字符串的第一个字符的地址。例如:

  • 字符串操作

    char * ch = "helloworld";  
    *ch = 'w'; // 修改字符串中的字符

    使用 newdelete 管理动态内存:

    char * pstr = new char[5];  
    delete[] pstr;

    注意:在 C++11 以后,autounique_ptr 是更推荐的选择。

  • 字符串输入输出

    char str[20];  
    cin >> str;
    cout << str << endl;

  • function 与结构

    当结构较小时,按值传递较为合理;当结构较大时,按指针或引用传递更为合理。例如:

  • 按值传递

    struct Point {  
    int x, y;
    };
    Point read_point() { /* 读取输入 */ }
    Point p = read_point();
  • 按指针传递

    void show(const Point * pxy) {  
    cout << pxy->x << ", " << pxy->y << endl;
    }
    Point p;
    show(&p);

  • string 与 array

    string 定义

    #include 
    string list[5];
    // 读取输入:
    cin >> list[i];

    array 定义

    #include 
    const seasons = 4;
    array
    names = {"spring", "summer", "fall", "winter"};
    array
    * pa;
    // 读取输入:
    cin >> (*pa)[i];
    // 输出:
    cout << (*pa)[i] << endl;

    递归

    C++ 不允许 main() 调用自己。递归函数需要谨慎处理栈深度。

    示例

    int factorial(int n) {  
    if (n == 0) return 1;
    return n * factorial(n - 1);
    }

    function 指针

    获取函数地址

    double pam(int x);  
    double (*pf)(int) = pam;
    void estimate(int line, double (*pf)(int)) {
    double x = (*pf)(5);
    // 或者:
    double x = pf(5);
    }

    以上内容涵盖了 C++ 中的核心概念,理解这些内容是掌握语言的关键。

    转载地址:http://herfk.baihongyu.com/

    你可能感兴趣的文章
    mysql 让所有IP访问数据库
    查看>>
    mysql 记录的增删改查
    查看>>
    MySQL 设置数据库的隔离级别
    查看>>
    MySQL 证明为什么用limit时,offset很大会影响性能
    查看>>
    Mysql 语句操作索引SQL语句
    查看>>
    MySQL 误操作后数据恢复(update,delete忘加where条件)
    查看>>
    MySQL 调优/优化的 101 个建议!
    查看>>
    mysql 转义字符用法_MySql 转义字符的使用说明
    查看>>
    mysql 输入密码秒退
    查看>>
    mysql 递归查找父节点_MySQL递归查询树状表的子节点、父节点具体实现
    查看>>
    mysql 里对root及普通用户赋权及更改密码的一些命令
    查看>>
    Mysql 重置自增列的开始序号
    查看>>
    MySQL 错误
    查看>>
    MySQL 面试,必须掌握的 8 大核心点
    查看>>
    MySQL 高可用性之keepalived+mysql双主
    查看>>
    MySql-2019-4-21-复习
    查看>>
    mysql-connector-java各种版本下载地址
    查看>>
    mysql-group_concat
    查看>>
    MySQL-redo日志
    查看>>
    MySQL-【1】配置
    查看>>