-3

私はこのように機能しています:

void foo(structTemp* p)
{
  .
  p->field1 = 1;
  p->field2 = 2;
  .
  foo_2(?????);
}

void foo_2(structTemp* p, int c)
{
   Need to use the pointer 'p' from foo here in this function.
}

foo_2(p、3)を使用しましたが、エラーが表示されます。foo_2で使用するポインタpを正しく渡すにはどうすればよいですか?

編集:関数をfoo_2(p、2)またはfoo_2(** p、2)として呼び出そうとしましたが、エラーが発生します。手伝ってもらえますか?

4

2 に答える 2

1

あなたがそれを呼び出そうとした方法正しいですが、foo2それを使おうとする前に宣言されていない問題があるかもしれません-その場合、それは以前の(デフォルトの)宣言と一致しない宣言について不平を言うでしょう。

これを確認/修正するには、2つの関数の順序を変更するか、前に宣言(プロトタイプ)fooを指定して、デフォルトのプロトタイプが使用されないようにします。

void foo_2 (structTemp*, int);

したがって、次のいずれかです。

void foo_2 (structTemp* p, int c) {
    // Weave your magic here
}

void foo (structTemp* p) {
   foo_2 (p, 3);
}

また:

void foo_2 (structTemp*, int);

void foo (structTemp* p) {
   foo_2 (p, 3);
}

void foo_2 (structTemp* p, int c) {
    // Weave your magic here
}

foo_2どちらも最初の使用前に必要に応じて宣言する必要があるため、正常に機能します。

すでにプロトタイプをお持ちの場合は、それを確認する必要があります。コメントには、コンパイラが互換性のない宣言について不平を言っていることを示すテキストが含まれているため、既存のプロトタイプは正しくない必要があります。

于 2012-12-28T03:43:48.907 に答える
1

p内部で使用するにfoo_2は、fooの場合とまったく同じようにします。

p->field1は次の意味と同じ(*p).field1 です。pが指す構造体内の変数field1。

だから、このようなもの:

void foo(structTemp* p)
{
  .
  p->field1 = 1;
  p->field2 = 2;
  .
  foo_2(p,3);

  printf("field1 %d\nfield2 %d",p->field1, p->field2); 

}

void foo_2(structTemp* p, int c)
{
   p->field2 = 3;
}

印刷します:

field1 1
field2 3

構造体が次のようなものであると仮定します。

typedef struct _t{

  int field1, field2;

}structTemp;

これに問題がある場合は、変数の宣言/名前にエラーがある可能性があります。

于 2012-12-28T04:05:57.443 に答える