zoukankan      html  css  js  c++  java
  • [C++]数组参数

    在C++中数组永远不会按值传递它是传递第一个元素准确地说是第0 个的指针。

    例如如下声明

    void putValues( int[ 10 ] );

    被编译器视为

    void putValues( int* );

    数组的长度与参数声明无关因此下列三个声明是等价的

      // 三个等价的putValues()声明
      void putValues( int* );
      void putValues( int[] );
      void putValues( int[ 10 ] );

    第一种是传指针不用说了。

    另外一种机制是将参数声明为数组的引用当参数是一个数组类型的引用时数组长度,
    成为参数和实参类型的一部分编译器检查数组实参的长度与在函数参数类型中指定的长度是否匹配。--可能也正是因为这种限制很少使用此种方式。

    // 参数为10 个int 的数组
    // parameter is a reference to an array of 10 ints
    void putValues( int (&arr)[10] );
    int main() {
        int i, j[ 2 ];
        putValues( i ); // 错误: 实参不是 10 个 int 的数组
       putValues( j ); // 错误: 实参不是 10 个 int 的数组
       return 0;
    }

    因为数组的长度现在是参数类型的一部分所以putValues()的这个版本只接受10 个int的数组。

    void putValues( int (&ia)[10] )
    {
        std::cout << "( 10 )< ";
        for ( int i = 0; i < 10; ++i ) 
        {
            std::cout << ia[ i ];
            // 用逗号分隔元素
            if ( i != 9 )
                std::cout << ", ";
        }
        std::cout << " >\n";
    }
    void main()
    {
        int i[10]  = {1,2,3,4,5,6,7,8,9,0};
        putValues( i ); // 错误: 实参不是 10 个 int 的数组
        return;
    }

    注意:*ia周围的括号是必需的因为下标操作符的优先级较高下列声明:

    int *ia[ 10 ];

    将ia声明成一个含有10 个指向int 的指针的数组。

  • 相关阅读:
    HDU6808 Go Running(未解决问题
    K
    E
    D
    B
    I
    HDU 2255 奔小康赚大钱 (KM算法模板)
    hdu 1150 Machine Schedule(二分图模板题)
    ACM-ICPC 2018 焦作赛区网络预赛G Give Candies(欧拉降幂)
    ACM-ICPC 2018 焦作赛区网络预赛 L:Poor God Water(杜教BM)
  • 原文地址:https://www.cnblogs.com/fjfjfjfjfjfj/p/3077583.html
Copyright © 2011-2022 走看看