從我在Java中學到的是數組作爲參考被傳遞.. 這意味着指針在java中內部使用。JVM如何使用ArrayName.length屬性計算數組長度?
在C每當我們通過在函數內部的陣列,其也通過引用並且那傳遞爲什麼我們不能計算它的使用的sizeof()算子大小。與此類似,
第一種情況: - >
#include<stdio.h>
int main(int argc, char** argv) {
int array[5];
printf("size of the array is: %lu\n", sizeof(array)/sizeof(int));
return 0;
}
和輸出將是
size of the array is: 5
第二種情況: - >
#include<stdio.h>
void calculate_size(int *);
int main(int argc, char** argv) {
int array[5];
calculate_size(array);
return 0;
}
//Function definition...
void calculate_size(int p[]) {
printf("size of the array is: %lu\n", sizeof(p)/sizeof(int));
}
和輸出
size of the array is: 2
在第一種情況下,它給了我們確切的數組長度,但在第二種情況下,長度是荒謬的和錯誤的。
這是因爲,該陣列被作爲函數內引用傳遞,因此,基地址在這裏通過。這就是爲什麼它會導致sizeof()運算符考慮,上面的數組中只有單個元素,因此計算大小是基於該考慮。
現在和java一樣。這裏也是數組作爲參考傳遞。 那麼「arrayname.length」屬性如何計算它的長度。像這樣,
//Java code snippet...
int array[10];
System.out.println("Length of the array is "+array.length);
即使在一個函數中。 你能否詳細說一下我。
*「你可以詳細說明一下嗎?」 - 他們是兩種完全不相關的語言。故事結局。如果您問的是JVM如何在內部處理它,這是一個完全不同的故事(並且對於SO來說太廣泛了) – UnholySheep
也不論是Java還是C都將數組作爲參考傳遞。在C中,它衰減到一個按值傳遞的指針,在Java中,數組是引用類型,並且您正在按值傳遞對該數組的引用。 – UnholySheep
Java中的數組是與COD中的'std :: array'或'std :: vector'類似的對象,與POD數組不同 –