4

I'm getting gcc errors when I compile my code. The errors are about "passing argument 1 of ‘print_path’ makes pointer from integer without a cast".

Here is my function prototype:

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

Here is my function:

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]);
}

and here is where I call my function:

print_path(previous, dest_index);

I'm obviously passing it in wrong, or else I'm doing something incorrectly about how to pass an array into a function. Any help?

Thanks guys!

4

5 に答える 5

7

これは明らかに再帰関数です。print_path()は 2 つのパラメーターを取ることに注意してください。1 つ目はint配列で、2 つ目はその配列内の位置へのインデックスです。

それを呼び出す:

print_path( previous[desired_node_index] );

絶対に間違っています (この関数をオーバーロードしていない限り)。これは、2 つのパラメーターが必要であり、1 つしか渡していないためです。あなたがすべきことは次のとおりです。

print_path( previous, desired_node_index );

この関数に欠けているように見えるのは、インデックス変数を増減する操作です。そうしないと、常に配列内の同じ位置が出力されます。

あなたがやろうとしていることを正確に知らなくても、これをしたかった可能性があります:

print_path( previous, previous[desired_node_index] );
于 2012-04-06T15:56:45.610 に答える
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');

 }
于 2013-07-19T11:56:49.210 に答える
0

明らかなエラーは次のとおりです。

print_path(以前の[望ましい_ノード_インデックス]);

何をしようとしているのかはわかりませんが、次のようなものが必要だと思います。

#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]);
}
于 2012-04-06T17:29:54.583 に答える