通过引用将变量传递给另一个函数时变量的值

时间:2016-06-06 07:24:33

标签: c function pointers parameter-passing pass-by-value

我有一个项目,我必须在C中创建一个基本数据库。我的问题在于不断地将变量n从函数传递给函数,并且在某一点上值会发生变化。

我制作了一个测试程序,说明了我遇到的同样问题:

#include <stdio.h>
#include <stdlib.h>

void functionTWO(int *n)
{
    printf("\n%d",*n);
}

functionONE(int *n)
{
    int i=0;
    i++;
    i++;

    *n  = i;
    printf("\n%d", *n);

    functionTWO(&n);
}

int main()
{
    int n=0;


    printf("%d",n);

    functionONE(&n);

    return 0;
}

第二个函数中的n显示为非常高的数字,例如:

0
2
2752268

现在,我知道这可能是有意的,但你们能否解释为什么会这样发生?

5 个答案:

答案 0 :(得分:3)

functionONE()中,n已经是指针。如果您打算更改该地址的值,则不需要传递指针的地址

作为建议,请始终检查数据类型并启用编译器警告以帮助您。

答案 1 :(得分:2)

<强> functionONE() 你传递的是地址。所以这是n的打印地址。

现在你想要一个正确的输出然后n作为双指针** n。

void functionTWO(int **n)
{
   printf("\n%d",**n);
 }

答案 2 :(得分:1)

首先,在C int & n中不是n的引用,它是它的地址。现在,你所做的是创建一个int - 将它的地址发送到functionONE - 做了一些值该地址然后将参数的地址发送到functionTWO,而不是发送参数本身,因为它已经是一个指针。这样做:

    #include <stdio.h>
    #include <stdlib.h>

    void functionTWO(int *n)
    {
      printf("\n%d",*n);
    }

    functionONE(int *n)
    {
      int i=0;
      i++;
      i++;
      *n  = i;
      printf("\n%d", *n);
      functionTWO(n);      // <-- send the pointer, not it's address
    }

    int main()
    {
      int n=0;
      printf("%d",n);
      functionONE(&n);
      return 0;
    }

答案 3 :(得分:0)

functionONE中,nint *,只是一个指针,当您执行functionTWO(&n);时,您获得n的地址,因此输出很有价值。

答案 4 :(得分:0)

CGRect labelframe // Customize according to your need oponent = [[UILabel alloc] initWithFrame:labelframe]; // missing proponent = [[UILabel alloc] initWithFrame:labelframe]; // missing 函数中打印的值是functionTWO中声明的指针变量n的地址。在这种情况下,您可以像这样修改functionONE

functionTWO

只需传递指针变量的值,就像这样

void functionTWO(int **n) { printf("\n%d",**n); }