zoukankan      html  css  js  c++  java
  • 数组和函数

    1. 数组作为参数

    需要注意:

    • 修改数组的函数,实际上传入的是一个指针,这导致原数组的长度信息丢失,因此还需要传入数组长度数据;
    #include <iostream>
    
    const int ArSize = 8;
    
    int sum_arr(int arr[], int n);
    
    int main()
    {
        int p{},m{},q{};
        int cookies[ArSize] = {1, 2, 4, 8, 16, 32, 64, 128};
        std::cout << cookies << " = array address";
    
        int sum = sum_arr(cookies, ArSize); // 8个元素求和
        std::cout << "Total cookies eaten :" << sum << std::endl;
    
        sum = sum_arr(cookies, 4); // 前4个元素求和
        std::cout << "Total cookies eaten " << sum << " cookies.
    ";
    
        sum = sum_arr(cookies + 4, 4); // 后4个元素求和
        std::cout << "Last four eaters eaten " << sum << " cookies.
    ";
    }
    
    int sum_arr(int arr[], int n)
    {
        int total = 0;
        std::cout << arr << " = arr, ";
    
        std::cout << sizeof arr << " = sizeof arr
    ";
        for (int i = 0; i < n; i++) {
            total += arr[i];
        }
        return total;
    }
    

    实际传入的是数组地址,这样有两个好处:

    • 节省空间
    • 降低数据破坏风险

    2.数组填充

    由于数组作为参数,实际上是传址,为了防止函数无意中修改数组内容,使用const进行保护。

    #include <iostream>
    
    const int Max = 5;
    int fill_array(double ar[], int limit);
    void show_array(const double ar[], int n);
    void revalue(double r, double ar[], int n);
    
    int main() {
        using namespace std;
        double properties[Max];
    
        int size = fill_array(properties, Max);
        show_array(properties, size);
    
        if (size > 0) {  //判断输入的乘数是否有效,无效则重新输入
            cout << "请输入:";
            double factor;
            while (!(cin >> factor)) {
                cin.clear();
                while (cin.get() != '
    ')
                    continue;
                cout << "Bad input; Please input a new number: 
    ";
            }
            revalue(factor, properties, size);
            show_array(properties, size);
        }
        cout << "完成
    ";
        cin.get();
        cin.get();
        return 0;
    }
    
    int fill_array(double ar[], int limit) {
        using namespace std;
        double temp;
        int i;
    
        for (i = 0; i < limit; i++) {
            cout << "Enter value #" << (i + 1) << ": ";
            cin >> temp;
    
            if (!cin) { //如果输入无效字符
                cin.clear();
                while (cin.get() != '
    ')
                    continue;
                cout << "Bad input; Please input a new number: 
    ";
                break;
            } else if (temp < 0) { //如果输入负数
                break;
            }
            ar[i] = temp; //类型正确,给数组赋值
        }
        return i;
    }
    
    void show_array(const double ar[], int n) //const可以防止程序对传入参数进行修改
    {
        using namespace std;
        for (int i = 0; i < n; i++) {
            cout << "Property #" << (i + 1) << ": $";
            cout << ar[i] << endl;
        }
    }
    
    void revalue(double r, double ar[], int n)
    {
        for (int i = 0; i < n; i++) {
            ar[i] *= r;
        }
    }
    
  • 相关阅读:
    关于react框架的一些细节问题的思考
    shouldComponentUpdate不能直接比较object
    浅谈session,cookie,sessionStorage,localStorage的区别及应用场景
    dva相关文档
    vuex 源码:深入 vuex 之辅助函数 mapState
    第三课补充01——set类型 sorted类型命令操作详解,redis管道及事务
    第三课作业——set类型、sorted set类型的增删改查,redis的事务
    第二课补充01——redis-cli命令行详解、string类型、list类型、hash类型命令操作详解
    第二课作业——redis常用命令
    第五课——备份恢复
  • 原文地址:https://www.cnblogs.com/geoffreyone/p/9879979.html
Copyright © 2011-2022 走看看