博客
关于我
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 死锁了,怎么办?
    查看>>
    MySQL 深度分页性能急剧下降,该如何优化?
    查看>>
    MySQL 深度分页性能急剧下降,该如何优化?
    查看>>
    MySQL 添加列,修改列,删除列
    查看>>
    mysql 添加索引
    查看>>
    MySQL 添加索引,删除索引及其用法
    查看>>
    mysql 状态检查,备份,修复
    查看>>
    MySQL 用 limit 为什么会影响性能?
    查看>>
    MySQL 用 limit 为什么会影响性能?有什么优化方案?
    查看>>
    MySQL 用户权限管理:授权、撤销、密码更新和用户删除(图文解析)
    查看>>
    mysql 用户管理和权限设置
    查看>>
    MySQL 的 varchar 水真的太深了!
    查看>>
    mysql 的GROUP_CONCAT函数的使用(group_by 如何显示分组之前的数据)
    查看>>
    MySQL 的instr函数
    查看>>
    MySQL 的mysql_secure_installation安全脚本执行过程介绍
    查看>>
    MySQL 的Rename Table语句
    查看>>
    MySQL 的全局锁、表锁和行锁
    查看>>
    mysql 的存储引擎介绍
    查看>>
    MySQL 的存储引擎有哪些?为什么常用InnoDB?
    查看>>
    Mysql 知识回顾总结-索引
    查看>>