我是 Java 的新手,有一个话题让我大吃一惊。 将数组传递给 java 函数。 代码如下:
private void PassArray(){
String[] arrayw = new String[4]; //populate array
PrintA(arrayw);
}
private void PrintA(String[] a){
//do whatever with array here
}
他们说在 java 中数组是通过引用传递的。但它看起来与 C 中的“按值调用”非常相似:
#include <stdio.h>
/* function declaration */
double getAverage(int arr[], int size);
int main ()
{
/* an int array with 5 elements */
int balance[5] = {1000, 2, 3, 17, 50};
double avg;
/* pass pointer to the array as an argument */
avg = getAverage( balance, 5 ) ;
/* output the returned value */
printf( "Average value is: %f ", avg );
return 0;
}
double getAverage(int arr[], int size)
{
int i;
double avg;
double sum;
for (i = 0; i < size; ++i)
{
sum += arr[i];
}
avg = sum / size;
return avg;
}
请解释它们在值、引用和内存分配方面的区别。 任何进一步的链接将不胜感激。
最佳答案
C 中的数组是“按引用传递”而不是“按值传递”。请看下面的程序:-
void print_array (int array[], int len)
{
printf("Printing the array: ");
int i;
for (i = 0; i < len; ++i) {
printf("%d ", array[i]);
}
printf("\n");
}
void populate_array (int array[], int len)
{
printf("Populating the array....\n ");
int i;
for (i = 0; i < len; ++i) {
array[i] = i;
}
}
int main()
{
int array[5];
memset(array, 0, sizeof(int) * 5);
print_array(array, 5);
populate_array(array, 5);
print_array(array, 5);
return(0);
}
Output:-
GAGUPTA2-M-40UT:Desktop gagupta2$ ./a.out
Printing the array: 0 0 0 0 0
Populating the array....
Printing the array: 0 1 2 3 4
所以一旦你将数组作为参数传递给函数,它就不再是C中的“按值传递”机制。而是“按引用传递”。因此,在调用 populate_array() 之前,数组的内容全为零,而在调用 populate_array() 之后,它们有一些值。
在 Java 中,您会观察到类似的情况。在下面放置类似的 Java 代码:-
public class Test
{
public static void print_array (String[] array)
{
System.out.println("Printing the array");
for (int i = 0; i < array.length; ++i) {
System.out.print(array[i] + " ");
}
System.out.println();
}
public static void populate_array (String[] array)
{
System.out.println("Populating the array");
for (int i = 0; i < array.length; ++i) {
array[i] = new String("init_array");
}
}
public static void main (String[] args)
{
String[] array = new String[5];
print_array(array);
populate_array(array);
print_array(array);
}
}
Output:-
GAGUPTA2-M-40UT:Desktop gagupta2$ java Test
Printing the array
null null null null null
Populating the array
Printing the array
在 java 中,基本数据类型如 int、float、double、boolean 等总是按值传递,但当你传递非基本类型如数组、字符串和对象时,对象的地址将被传递。参见 Is Java "pass-by-reference" or "pass-by-value"?了解更多详情。
关于java - 将数组传递给函数 Java v/s C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30985971/