博客
关于我
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/

    你可能感兴趣的文章
    MS UC 2013-0-Prepare Tool
    查看>>
    msbuild发布web应用程序
    查看>>
    MSCRM调用外部JS文件
    查看>>
    MSEdgeDriver (Chromium) 不适用于版本 >= 79.0.313 (Canary)
    查看>>
    msf
    查看>>
    MSSQL数据库查询优化(一)
    查看>>
    MSSQL日期格式转换函数(使用CONVERT)
    查看>>
    MSTP多生成树协议(第二课)
    查看>>
    MSTP是什么?有哪些专有名词?
    查看>>
    Mstsc 远程桌面链接 And 网络映射
    查看>>
    Myeclipse常用快捷键
    查看>>
    MyEclipse用(JDBC)连接SQL出现的问题~
    查看>>
    myeclipse的新建severlet不见解决方法
    查看>>
    MyEclipse设置当前行背景颜色、选中单词前景色、背景色
    查看>>
    MyEclipse配置SVN
    查看>>
    MTCNN 人脸检测
    查看>>
    MyEcplise中SpringBoot怎样定制启动banner?
    查看>>
    MyPython
    查看>>
    MTD技术介绍
    查看>>
    MySQL
    查看>>