C - 函数值未正确传递两个整数值之一

时间:2013-03-06 20:53:27

标签: c function variables pointers

所以这是代码 - 我知道一些简单的错误,但我似乎无法弄明白。我尝试了不同的数字类型,指针和其他方法......变量bc在函数separate()中具有正确的值 - 但是当它们传递给{{ 1}}它们以main()b = 0(或类似的东西)出现....

我缺少什么?这是代码:

c = -471211

4 个答案:

答案 0 :(得分:5)

在C中,所有函数参数都按值传递。因此,修改参数在函数之外没有任何影响。如果要修改函数的参数,则必须将指针传递给它:

void change_arg(int *arg)
{
    *arg = 42;
}

int arg = 1337;
printf("Before: %d\n", arg);
change_arg(&arg);
printf("Afer: %d\n", arg);

答案 1 :(得分:3)

bc未初始化。由于您通过复制调用,因此未在函数中设置它们。 要么返回您想要的值,要么使用int*作为参数。

我认为你需要阅读更多有关C如何工作的内容。

答案 2 :(得分:0)

在上面的函数中,您将按值传递变量,因此在调用b后,cseparate()的值不会更改。它们是未初始化的,因此它们是随机值。

请改为尝试:

#include <stdio.h>

void separate(int a, int* b, int* c){
    *b = a/12;
    *c = a%12;
}

int main(){
    int a = 100;
    int b, c;
    separate(a, &b, &c);
    printf("%i = 12 * %i + %i \n", a, b, c);
}

这会将b的地址和c的地址传递给函数的指针。然后,该函数修改地址处的值。

答案 3 :(得分:0)

重写函数如下

void separate(int a, int* pb, int* pc){
  *b = a/12;
  *c = a%12;   }

其中参数bc是指向int的指针。

然后在主要写一些像

 int a = 100
 int b, c;            
 int *pb, *pc;

 pb=&b;
 pc=&c;

其中变量pbpc是指向int的指针。 使用说明pb=&b;pc=&c;,您将pb的内存位置bpc的内存位置分配给c

现在,如果你打电话

 separate(a, pb, pc);
 printf("%i = 12 * %i + %i \n", a, b, c);

你得到了正确的输出。