我只是在学习C,但是我过去经常使用Ruby,您可以做的一件事是创建一个函数,允许您传入变量,然后在该函数中重新定义变量。然而,在C语言中,函数似乎不查看变量,而是查看该变量中存储的内容。例如:
void add(int a, int b, int c);
int main(void)
{
int num1 = 1, num2 = 1, num3;
add(num1, num2, num3);
printf("%d", num3);
}
void add(int a, int b, int c)
{
c = a + b;
}只需返回一个错误,说明未定义中的变量num3。所以我的问题是,我是因为我缺乏知识而做错了这件事吗?如果是的话,正确的方法是什么,或者在C语言中这是不可能的?
发布于 2014-02-07 02:49:48
C按值传递变量。如果在添加后在函数中打印c,则它的值为2。然而,这对main中的变量(未初始化)没有任何影响。要改变这种情况,您必须将其按地址传递:
void add(int a, int b, int *c)
{
*c = a + b;
}以及:
add(num1, num2, &num3);或者,您可以让函数返回新值:
int add(int a, int b)
{
return a + b;
}
num3 = add(num1, num2);发布于 2014-02-07 02:50:06
是的,可以,但是C中的参数是通过值传递的。一直都是。你可以通过间接获得你想要的东西,即传递一个指针;
void add(int a, int b, int *sum)
{
if (!sum)
// handle error
*sum = a + b;
}
// calling this function...
add(a, b, &c);您可以始终添加一个间接级别。如果需要在函数中设置whatever*,则传递一个whatever**。当然,您可以随时更改指针所指的内容,而不添加间接的内容,因为您只需要地址。
void foo(whatever *w)
{
// this works, because dereferencing the
// pointer gets you to the same address in
// memory that the original refers to
w->something = something_else;
// this does not work as you may expect
// because you are mutating the local copy
w = caller_will_never_see;
}当然,我觉得这个版本更好,但这是你的决定:
int add(int a, int b)
{
return a + b;
}不需要处理空指针,您可以更自然地调用它:
int a = 1;
int b = 2;
int c = add(a, b);https://stackoverflow.com/questions/21618331
复制相似问题