如何在C ++中将数组作为函数的参数?

时间:2011-11-08 16:21:00

标签: c++ encryption hash

我在为学校科学博览会撰写的程序中有一个函数,它需要做的是将数组作为参数,加密数组的值,并将加密值存储在字符串中。我怎么能这样做?

3 个答案:

答案 0 :(得分:5)

有几种方法可以做到这一点。以下是一些例子:

  • C风格

    void f(T *array, size_t size);
    

    在这种风格中,数组衰减到指向第一个参数的指针,该参数作为第一个参数传递给函数。由于这种转换失去了数组的大小,你也要传递大小,我作为函数的第二个参数。用它作为:

    T  array[N]; //N is some compile-time constant.
    f(array, N);
    
  • C ++ - 风格

    template<typename T, size_t size>
    void f(T (&array)[size]);
    
    void f(std::vector<T> & array);
    

    在此样式中,您可以通过引用传递数组,该数组保留数组的大小,或者您可以使用std::vector<T>代替。用它作为:

    T array[N];
    f(array); //calls the first version (the template version)
    
    std::vector<T> v;
    //fill v
    f(v); //calls the vector version
    

    由@Mike添加:或者你可以使用它,这甚至更好:

    template<typename FwdIterator>
    void f(FwdIterator begin, FwdIterator end)
    {
       for( ; begin != end ; ++begin)
       {
            //your code
       }
    }
    

    这更好,更通用,因为有了它,您可以使用标准容器(例如std::vectorstd::list等)以及普通数组。例如,

    T array[N];
    std::vector<T> v;
    //fill v
    
    f(array, array+N);      //okay
    f(v.begin(), v.end());  //also okay.
    

    很酷,不是吗?

答案 1 :(得分:1)

void YourFunction(const int myarray[]);

否则,如果您想接受任何类型

void YourFunction(const void* myGenericArray);

希望这有帮助

答案 2 :(得分:0)

void encrypt(Array& array, /*other parameters*/)
无论您使用何种阵列类型,

都可以。

如果你的数组是C风格的指针,你也可以传递它:

void encrypt(int* array, /*other parameters*/)