2014-09-19 38 views
0

为什么传递参数无法更改。 我有一些功能传递参数无法编辑

void read_errorlog (int success, char *names, int empty) { 

从另一个叫,其中

const char *names[2] = {"errorlog.txt","errorlog1.txt"} 
    int empty = 0; 
    int counter = 0; 
    int success = 0; 

所有变量初始化。 void read_errorlog的内部都不int success,而不是int empty更改那里值。 我这样做,就像empty = 0; 我打电话read_errorlog (one, two, three)功能。我现在得到了,我必须传递int变量的地址。谢谢。

+3

请写更多accuate示例代码,因为老实说,我不知道有什么问题。 – python 2014-09-19 16:05:17

回答

1

这是按价值调用(你在做什么)和“按参考调用”(你应该做什么)的区别。

当您调用函数read_errorlog时,传递的参数实际上是作为参数给出的变量的副本。所以,当你在函数内部做empty=0时,你改变了副本的值,但不改变原始变量的值。

对于“通过引用调用”,您需要传递一个指向empty的指针和一个指向success的指针,而不是它们的值。这可以做到如下:

void read_errorlog (int* success, char *names, int* empty) { 
    *empty = 0; 
    *success = 1; 
} 

read_errorlog(&success, names, &empty); 
+1

你应该把引用的*调用放在引号中,因为它是一个模拟的*引用引用*,因为在C中只有值传递。 – alk 2014-09-19 16:12:38

+0

@ alk-可否请您提供一些关于“在C中只有按价值传递”的详细信息。 ? – 2014-09-19 17:04:48