通过多个功能通过引用传递

时间:2009-04-04 19:09:57

标签: c pointers

嘿所有人。我正在为学校做一个项目,我需要通过多个函数通过引用传递一些参数。我理解如何通过引用将变量声明的位置传递给另一个函数,如下所示:

main() {
  int x = 0;
  int y = 0;
  int z = 0;

  foo_function(&x, &y, &z);
}

int foo_function(int* x, int* y, int* z) {
  *x = *y * *z;
  return 0;
}

但是,如何将foo函数中的x,y和z传递给另一个函数?像这样的东西给了我各种编译器警告。

int foo_function(int* x,  int* y, int* z) {
  *x = *y * *z;
  bar(&x, &y, &z);
  return 0;
}

int bar(int* x, int* y, int* z) {
  //some stuff
}

5 个答案:

答案 0 :(得分:11)

只需使用:

bar(x, y, z);

X,Y和Z已经是指针 - 直接传递它们。

记住 - 指针是内存中的一个位置。位置不会改变。取消引用指针(使用* x = ...)时,您将在该位置设置值。但是当你将它传递给一个函数时,你只是在内存中传递该位置。你可以将同一个位置传递给另一个函数,它可以正常工作。

答案 1 :(得分:2)

你不需要做任何事情,它们已经被引用了。

int foo_function(int* x,  int* y, int* z) {
  bar(x, y, z);
  return 0;
}

int bar(int* x, int* y, int* z) {
  //some stuff
}

答案 2 :(得分:2)

在foo_function中,y和z已经是指针(int *),所以你可以做bar(x,y,z)。

答案 3 :(得分:2)

int foo_function(int* x,  int* y, int* z) {
   *x = *y * *z;
   /* x, y and z are pointers to int
      &x, &y and &z are pointers to pointer to int
      bar expects pointers to int, so call bar as:
   */
   bar(x, y, z);
   return 0;
}

答案 4 :(得分:2)

C没有通过引用传递的概念。参数始终按值传递。但是,在使用指针时,此实际上是指向实际值的指针。

但你正在做什么

foo_function(&x, &y, &z);

实际上是在尝试获取指针的地址,这实际上是没有意义的(你会传递int**而不是int*)。

所以,

foo_function(x, y, z);

将是正确的调用,因为xyz已经是指针,您不需要再创建指向链了:)