在C ++中作为参数发送的零数组

时间:2010-04-14 14:03:51

标签: c++ arrays

如何将作为参数发送的数组中的所有元素= 0?

int myArrayFunction(int p_myArray[]) {
p_myArray[] = {0};//compiler error syntax error: ']'
.
.
}

7 个答案:

答案 0 :(得分:9)

不,你不能。没有足够的信息。你也需要传递数组的长度。

int myArrayFunction(int p_myArray[], int arrayLength) {
// --------------------------------------^ !!!

然后您可以使用memsetstd::fill将数组填充为零。 (= {0}仅适用于初始化。)

    std::fill(p_myArray, p_myArray+arrayLength, 0);

或者,切换为使用std::vector,然后您无需跟踪长度。

int myArrayFunction(std::vector<int>& p_myArray) {
    std::fill(p_myArray.begin(), p_myArray.end(), 0);

答案 1 :(得分:1)

使用std::fill_n()。你需要传递元素的数量。

答案 2 :(得分:0)

循环播放。这意味着您还需要将该数组的大小赋予该函数。

答案 3 :(得分:0)

int myArrayFunction(int p_myArray[], int size)
{
   for(int i=0; i<size; i++)
   {
      p_myArray[i] = 0;
   }
.
.
}

答案 4 :(得分:0)

使用std::fill。您需要以某种方式将数组的大小传递给函数。下面是使用模板大小方法的示例,但您应该考虑传递常规大小参数。

template<size_t size>
int myArrayFunction(int (&p_myArray)[size]) {
    std::fill(p_myArray, p_myArray + size, 0);
}

答案 5 :(得分:0)

这种分配仅适用于新数组的初始化,而不适用于修改现有数组。

当你得到一个int []时,你基本上有一个指向数组所在内存中某个区域的指针。一旦离开函数,指向其他东西(例如文字数组)将无效。

您可以做的最多是使用[]运算符或库函数更新单个单元格。例如,p_myArray [i] = 0(您可以在i循环中执行此操作,但您需要将大小传递给您的函数)。

答案 6 :(得分:0)

如果你的p_myArray []有一个终止字符,你可以循环直到找到char。 例如,如果它是一个字符串作为以null结尾的char数组,则在找到'\ 0'

时将停止
int myArrayFunction(char p_myArray[])
{

   for(int i=0;p_myArray[i]!='\0';i++)
       p_myArray[i]=0;

   //..
}

如果p_myArray的数字从0到100,则可以使用101来表示数组结束,依此类推..

所以分析p_myArray的使用和内容,如果它有一个永远不会被用作数据的值,你可以用它作为终止代码来标记结尾。