将数组传递给c中的函数

时间:2012-04-06 15:48:07

标签: c arrays function prototype

编译代码时出现gcc错误。错误是关于“传递参数1''print_path'使得指针来自整数而没有强制转换”。

这是我的函数原型:

void print_path(int previous[], int desired_node_index);

这是我的功能:

void print_path(int previous[], int desired_node_index)
{
  if( previous[desired_node_index] != -1 )
    print_path( previous[desired_node_index] );
  printf("-> %d ", previous[desired_node_index]);
}

这是我调用我的功能的地方:

print_path(previous, dest_index);

我显然错误地传递了它,否则我正在做一些关于如何将数组传递给函数的错误。有什么帮助吗?

谢谢你们!

5 个答案:

答案 0 :(得分:7)

这显然是递归函数。请注意print_path()有两个参数:第一个是 int 数组,第二个是该数组内部位置的索引。

致电:

print_path( previous[desired_node_index] );

绝对错误(除非你重载了这个函数),因为它需要2个参数而你只传递一个参数。你应该做的是:

print_path( previous, desired_node_index );

此函数中您似乎缺少的是增加/减少索引变量的操作,否则您将始终在数组中打印相同的位置。

在不知道你想要做什么的情况下,你有可能想要这样做:

print_path( previous, previous[desired_node_index] );

答案 1 :(得分:0)

一个明显的错误是:

  

print_path(previous [desired_node_index]);

我不确定你要做什么,但我想你想要的东西是:

#include <stdio.h>

void print_path(int *previous, int desired_node_index);

int main(void) {

    int dest_index = 2;
    int previous[5] = { -1, 0, 1, 2, 3};

    print_path(previous, dest_index);

    return 0;
}

void print_path(int *previous, int desired_node_index) {
    if( previous[desired_node_index] != -1 )
        print_path( previous, previous[desired_node_index]);
    printf("-> %d ", previous[desired_node_index]);
}

答案 2 :(得分:0)

void receive_array(int *temp_arr)
{
      int i=0;

      do
      {
         temp_arr[i]=temp_arr[i]+1;
         i++;
      }
      while((char)temp_arr[i]!='\0');

}

答案 3 :(得分:0)

这里我做了一些修改。数组temp_arr2 []是一个缓冲数组。在我的实际程序中,我从main()打印了数组。在这里,为了做同样的事情,需要将一些计算的最终结果存储回temp_arr [] .MAX可以是宏或全局变量。在前一个中,我忘了编辑这些行:temp_arr [i] = temp_arr [i] +1; (我的演示示例代码):)

void receive_array(int *temp_arr)
  {
      int i=0;
      int temp_arr2[MAX];


  do
  {
     temp_arr2[i]=temp_arr[i];
     i++;
  }
  while((char)temp_arr[i]!='\0');

 }

答案 4 :(得分:0)

如果要将数组传递给函数并在从函数更改元素后返回,则可以看到以下示例:

您可以在https://github.com/krishnabhat81/Send-and-return-array-from-function-in-C

找到解决方案
#include <stdio.h>

/*
If you want to return a single-dimension array from a function, you would have to 
declare a function returning a pointer as in the following example:
*/

int *getRandom(int arr[])
{
  static int  r[10];
  /*Second point to remember is that C does not advocate to return the address of a 
  local variable to outside of the function so you would have to define the 
  local variable as static variable.*/
  int i;

  for ( i = 0; i < 10; ++i)
  {
     r[i] = arr[i]+1;//rand();
     printf( "r[%d] = %d\n", i, r[i]);

  }

  return r;
}

/* main function to call above defined function */
int main ()
{
   /* a pointer to an int */
   int *p;
   int i;
   int arris[10] = {110,22,33,44,5,6,7,8,9,20};

   p = getRandom(arris);
   for ( i = 0; i < 10; i++ )
   {
       printf( "*(p + %d) : %d\n", i, *(p + i));
   }

   return 0;
}

   return 0;
}