双指针作为函数的数组

时间:2014-02-12 10:32:07

标签: c arrays pointers

这是我程序的示例代码。

我有一个名为function的函数,用于返回整数值和整数数组。我必须将它们作为指针传递(function的签名不能更改)。所以我写了下面的代码。在这里,我必须将值分配给传递给函数的双指针。

void function(unsigned int* count, unsigned int ** array)
{
  for(unsigned int i = 0; i<4;i++)
  {
    //array[i] = (unsigned int*)i*10;
  }
  *count = 4;
}

int main()
{

  unsigned int count;
  unsigned int array2[4];
  function(&count, (unsigned int**)&array2);

  return 0;
}

但上面的代码无效。

3 个答案:

答案 0 :(得分:2)

通过重用我认为你已经知道的概念,你可以使用指向数组第一个元素的指针,然后将指针的地址传递给函数

这样你就会有一个指向unsigned int的双指针,这是数组的第一个元素:

void function(unsigned int* count, unsigned int ** array)
{
  for(unsigned int i = 0; i<4;i++)
  {
    (*array)[i] = i*10; // WATCH OUT for the precedence! [] has higher precedence!
  }
  *count = 4;
}

int main(int argc, char* argv[])
{

  unsigned int count;
  unsigned int array2[4];
  unsigned int *pointer_to_array = &array2[0];
  function(&count, (unsigned int**)&pointer_to_array);

  return 0;
 }

作为旁注:

如果你可以改变签名,那就更有意义了:

void function(unsigned int* count, unsigned int * array)
{
  for(unsigned int i = 0; i<4;i++)
  {
    array[i] = i*10;
  }
  *count = 4;
}

int main(int argc, char* argv[])
{

  unsigned int count;
  unsigned int array2[4];
  function(&count, array2);

  return 0;
 }

上面工作的原因是因为当你将一个数组传递给一个函数(直接或使用一个指向该数组的显式指针)时,它实际上就变成了一个指针。这称为数组衰减

答案 1 :(得分:1)

void function(unsigned int* count, unsigned int ** array){
    for(unsigned int i = 0; i<4;i++){
        (*array)[i] = i*10;
    }
    *count = 4;
}

int main(){
    unsigned int count;
    unsigned int array2[4];
    unsigned int *p = &array2[0];
    function(&count, &p);
    return 0;
}

答案 2 :(得分:0)

要分配给由指针传递的数组,首先取消引用它,然后分配值。

void function(unsigned int* count, unsigned int ** array)
{
  for(unsigned int i = 0; i<4;i++)
  {
    (*array)[i] = i*10;
  }
  *count = 4;
}