C++ 如何使数组成为C+;中函数的参数+;?

C++ 如何使数组成为C+;中函数的参数+;?,c++,encryption,hash,C++,Encryption,Hash,我在为学校科学展编写的程序中有一个函数,它需要做的是将数组作为参数,加密数组的值,并将加密的值存储在字符串中。我该怎么做 void YourFunction(const int myarray[]); 否则,如果要接受任何类型的 void YourFunction(const void* myGenericArray); 希望这有帮助 void encrypt(Array& array, /*other parameters*/) 否则,如果要接受任何类型的 void YourFu

我在为学校科学展编写的程序中有一个函数,它需要做的是将数组作为参数,加密数组的值,并将加密的值存储在字符串中。我该怎么做

void YourFunction(const int myarray[]);
否则,如果要接受任何类型的

void YourFunction(const void* myGenericArray);
希望这有帮助

void encrypt(Array& array, /*other parameters*/)
否则,如果要接受任何类型的

void YourFunction(const void* myGenericArray);
希望这有帮助

void encrypt(Array& array, /*other parameters*/)
可以,不管使用什么数组类型

如果数组是C型指针,也可以传递它:

void encrypt(int* array, /*other parameters*/)
可以,不管使用什么数组类型

如果数组是C型指针,也可以传递它:

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

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

  • C型

    void f(T *array, size_t size);
    
    在这种样式中,数组衰减到指向第一个参数的指针,该参数作为第一个参数传递给函数。由于此转换会丢失数组的大小,因此还必须传递该大小,我将其作为第二个参数传递给函数。将其用作:

    T  array[N]; //N is some compile-time constant.
    f(array, N);
    
    T array[N];
    f(array); //calls the first version (the template version)
    
    std::vector<T> v;
    //fill v
    f(v); //calls the vector version
    
  • C++风格

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


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

    • C型

      void f(T *array, size_t size);
      
      在这种样式中,数组衰减到指向第一个参数的指针,该参数作为第一个参数传递给函数。由于此转换会丢失数组的大小,因此还必须传递该大小,我将其作为第二个参数传递给函数。将其用作:

      T  array[N]; //N is some compile-time constant.
      f(array, N);
      
      T array[N];
      f(array); //calls the first version (the template version)
      
      std::vector<T> v;
      //fill v
      f(v); //calls the vector version
      
    • C++风格

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



    如何获得阵列?在
    向量
    数组
    ,仅仅是c样式的数组,或者其他什么?什么部分导致了您的问题?可以将数组的名称作为参数传递给以类型指针为参数的函数;例如,您可以将
    inta[10]
    传递到
    foo(int*p)
    。当然,
    foo()
    不会知道
    a
    的大小——您必须将其作为第二个参数传递。也许我不够清楚。正确的写入方式是什么:如何获取数组?在
    向量
    数组
    ,仅仅是c样式的数组,或者其他什么?什么部分导致了您的问题?可以将数组的名称作为参数传递给以类型指针为参数的函数;例如,您可以将
    inta[10]
    传递到
    foo(int*p)
    。当然,
    foo()
    不会知道
    a
    的大小——您必须将其作为第二个参数传递。也许我不够清楚。正确的写入方式是什么:这还不够——您不知道数组的大小。此外,问题是标记C++,所以泛型确实应该用模板来完成,而不是<代码> Value*/Cuff>。不能使用<代码> const >:OP需要改变数组中的值。@弗拉德,这不是我的阅读需求。数组是一个输入参数。字符串是输出参数。@MikeSeymour:有一个不精确的问题,我很明显只能写这个。但是,如果你在C++中使用函数,在使用VoT *时没有问题,我是说,当你使用函数作为一个面向对象程序时,你仍然使用C++作为C程序,这是不够的,你不知道数组的大小。此外,问题是标记C++,所以泛型确实应该用模板来完成,而不是<代码> Value*/Cuff>。不能使用<代码> const >:OP需要改变数组中的值。@弗拉德,这不是我的阅读需求。数组是一个输入参数。字符串是输出参数。@MikeSeymour:有一个不精确的问题,我很明显只能写这个。但是,如果你在C++中使用函数,在使用VoT *时没有问题,我是说,当你使用C++作为函数时,你仍然使用C++作为一个面向对象程序,而对于它来说,额外的通用性,模板无效F(它开始,结束);code>@Mike:这样,代码就可以为调用编译,比如
    f(&var1,&var2)
    对于任何类型相同的变量
    var1
    /
    var2
    ,哪种类型会破坏编译时安全性。@MikeSeymour:谢谢。将其添加到我的帖子中。@Vlad:这是所有类型的标准容器的问题,但关键是在使用该函数之前,您必须阅读文档。如果你不阅读文档,那么你就可以编写这样的代码,不管你如何编写函数。@Nawaz:好吧,编译时安全就是防止愚蠢的错误/打字错误。假设您将函数用作
    f(&a[0],&a[5])
    (完全合法),我来将所有出现的
    a
    更改为
    b
    ,除了一个错误。编译器无法捕捉到这一点。如果我们想让用户单独使用文档,而不需要有用的编译器支持,那么我们也可以使用最通用的
    void*
    。(注意:我认为这是C++模板的问题:它们太强大,太接近宏)。对于额外的通用性,<代码>模板无效F(它开始,结束);
    @Mike:这样,代码就可以为调用编译,比如
    f(&var1,&var2)
    对于任何类型相同的变量
    var1
    /
    var2
    ,哪种类型会破坏编译时安全性。@MikeSeymour:谢谢。将其添加到我的帖子中。@Vlad:这是所有类型的标准容器的问题,但关键是在使用该函数之前,您必须阅读文档。如果你不阅读文档,那么你就可以编写这样的代码,不管你如何编写函数。@Nawaz:好吧,编译时安全就是防止愚蠢的错误/打字错误。假设您将函数用作
    f(&a[0],&a[5])
    (完全合法),我来将所有出现的
    a
    更改为
    b
    ,除了一个错误。编译器无法捕捉到这一点。如果我们想让用户单独使用文档,而不需要有用的编译器支持,我们可以使用