所以这是代码 - 我知道一些简单的错误,但我似乎无法弄明白。我尝试了不同的数字类型,指针和其他方法......变量b
和c
在函数separate()
中具有正确的值 - 但是当它们传递给{{ 1}}它们以main()
和b = 0
(或类似的东西)出现....
我缺少什么?这是代码:
c = -471211
答案 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)
b
和c
未初始化。由于您通过复制调用,因此未在函数中设置它们。
要么返回您想要的值,要么使用int*
作为参数。
我认为你需要阅读更多有关C如何工作的内容。
答案 2 :(得分:0)
在上面的函数中,您将按值传递变量,因此在调用b
后,c
和separate()
的值不会更改。它们是未初始化的,因此它们是随机值。
请改为尝试:
#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; }
其中参数b
和c
是指向int的指针。
然后在主要写一些像
int a = 100
int b, c;
int *pb, *pc;
pb=&b;
pc=&c;
其中变量pb
和pc
是指向int的指针。
使用说明pb=&b;
和pc=&c;
,您将pb
的内存位置b
和pc
的内存位置分配给c
。
现在,如果你打电话
separate(a, pb, pc);
printf("%i = 12 * %i + %i \n", a, b, c);
你得到了正确的输出。