-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遇到在尝试使用它之前未声明的问题 - 在这种情况下,它会抱怨声明与早期(默认)不匹配。

您可以通过更改两个函数的顺序或在之前提供声明(原型)来检查/修复此问题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

要使用pinside foo_2,您的操作与 foo 中的完全相同。

p->field1与 wich 含义相同(*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 回答