变量涉及到C和Java之间的区别?

时间:2013-04-01 17:55:04

标签: java c

我最近问过这个问题:Why aren't my pointers to integer arrays working?

其中一个建议是使用常规变量而不是指向变量的指针。

我过去曾用Java编程。如果我理解正确,如果你在Java中有这个代码:

void test(b) {
    b++;
}

void main() {
    int a = 0;
    test(a);
}

然后a将保持为0.但如果我理解正确,在C中,如果我有这个代码:

void test(b) {
    b++;
}

int main() {
    int a = 0;
    test(a);
    return 0;
}

然后a变为1?

4 个答案:

答案 0 :(得分:4)

不,在c传递值时会复制该值,原始变量不会更改。

现在,您可以传递该变量的地址值,然后在您查找传递的地址所指向的函数中,并更改该地址的值,然后更改原始变量。

答案 1 :(得分:2)

没有。在C示例中,a仍将保留其原始值。在C中,所有参数都按值传递,而在Java中,只有原始类型按值传递,其他所有参数都通过引用传递。为了达到您描述的效果,您的代码应如下所示:

void test(int* b) {
    (*b)++;
}

int main() {
   int a = 0;
   test(&a);
   return 0;
}

在这里,test接受指向int的指针,然后取消引用(获取指定地址内存中的值)并将其增加1.在main()中传递地址a

答案 2 :(得分:1)

等一下。“在C中,参数按值传递给函数,而其他语言可以通过引用传递变量。这意味着接收函数获取值的副本,并且没有直接的方法来更改原始变量。一个函数来改变从另一个函数传递的变量,调用者必须传递它的地址(指向它的指针),然后可以在接收函数中取消引用它。有关更多信息,请参阅指针。“

答案 3 :(得分:0)

在两种语言中,变量的传递都是通过复制值来实现的。只是使用C,您可以将内存位置(指针)作为值传递,并通过引用有效地传递。

在Java中,您可以通过传入引用来执行相同的操作(实际上没有内存地址值);但是,java内置类型不能通过引用传递,因为只能通过引用引用对象。请注意,数组实际上是java中的对象,因此在处理数组时,必须将某些规则解释为 as objects ,即使它们是Java基元的数组。