将指针传递给函数 - 取消引用或直接发送?

时间:2012-12-28 03:36:41

标签: c pointers

我有这样的功能:

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),但是会出错。你能帮忙吗?

2 个答案:

答案 0 :(得分: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

如果您已经有原型,您应该检查它。由于您的注释包含指示编译器抱怨不兼容声明的文本,因此现有原型必须是不正确的。

答案 1 :(得分:1)

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

p->field1(*p).field1相同,意思是:结构中的变量field1由p指向。

所以,像这样:

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;

如果您遇到此问题,可能是因为您的变量声明/名称出现了一些错误。