2014-10-23 4 views
0

는 다음과 같은 고려 :배열을 함수에 전달하는 방법은 무엇입니까?

String[] array = {1,2,3,4}; 

myFunction(array); 

public void myFunction(String[] array){ 
//some task here 
} 

오늘이 질문에 대답했다.

배열을 함수로 전달하는 방법은 무엇입니까? 기본 기술이란 무엇입니까?

내가 대답하지 않을 때, 나는 다음과 같이 들었다.

첫 번째 요소의 주소가 전달되고 바이트 x을 추가하여 첫 번째 요소의 주소에서 다른 연속 요소를 가져옵니다.

모든 프로그래밍 언어 또는 C 및 C++에서만 발생합니까?

고맙습니다!

+1

"모든 프로그래밍 언어에서이 문제가 발생합니까?" 당연히 아니지. 모든 언어에 함수와 배열이있는 것은 아닙니다. 그리고 C 나 C++ 어느 것도 함수에 배열을 전달할 수 없습니다. 첫 번째 요소에 대한 포인터 또는 (C++에서는) 배열에 대한 참조. –

+0

배열은 consective 메모리 위치를 할당하므로 C/C++ 이외의 다른 언어에서도 가능하다고 생각합니다. –

+0

그래서 특정 프로그래밍 언어에서 배열이 처리되는 방식은 무엇입니까? – Nabin

답변

4

아니요, Java에서는 배열이 개체입니다. 메서드는 다른 객체가 메서드에 전달되는 것처럼 전달됩니다.이 메서드는 첫 번째 요소에 대한 참조가 아니라 배열 객체 전체를 참조합니다.

this page에서 촬영 :

모든 클래스와 배열 유형의 상속 (§8.4.8) 같은 의미에서

자바는 "포인터"의 개념이 없습니다 Object 클래스의 방법, C 또는 C++ (메모리의 주소)로, 즉 객체 참조는 실제로 객체가 저장된 메모리 위치를 가리 키지 않습니다.

+2

멋지게 마누 티가 말했다. –

+0

+1 답변 주셔서 감사합니다. – Nabin

+0

Java에 명확한 포인터가 있습니다. 그냥 참조를 호출합니다. 스택의 실제 포인터가 객체를 직접 가리키는 지 여부는 무의미합니다. 이것은 구현 세부 사항입니다 (C++ 포인터의 물리적 데이터가 메모리의 실제 주소를 지정해야한다는 요구 사항은 없습니다). –

3

이론상 모든 언어가 다릅니다. 그러나 :

  • C에서 함수는 인수로 배열을 사용할 수 없습니다. 배열 매개 변수를 선언하면 형식은 자동으로 이 포인터로 변환되므로 void f(int a[5])void f(int*) 사이에는 차이가 없습니다. 배열이 최상위 클래스 객체가 아니라고 말하면서 이 요약됩니다. C 호환성을 이유로 C++은 동일한 규칙을 따르지 만 C++에서는 을 사용하므로 일반적으로 배열을 매개 변수로 으로 전달하지 않습니다. 그렇게했다면 참조로 전달할 것입니다. 여기서 이 포인터로의 변환은 발생하지 않습니다. (즉 void f(int (&a)[5])하지void f(int* &a)과 동일합니다.)

  • 자바에서

    및 기타 최근 여러 언어로, 모든 (또는 거의) 등의 개체 및 매개 변수, 변수, 배열된다 포함 이러한 객체에 대한 포인터입니다. 그래서 Java에서 은 배열에 대한 포인터를 전달하지만 전체 배열 객체는 크기와 같은 정보를 가지고 있습니다. 과 같은 배열은 C++에서 std::vector<int>*과 같습니다.

  • Modula 계열의 Pascal 및 언어와 같은 많은 언어 (대부분 이전입니까?)와 배열은 다른 언어와 마찬가지로 객체 유형입니다 ( ).특별한 조치를 취하지 않으면 배열이 배열의 전체 복사본과 함께 값으로 전달됩니다. 일반적으로, 그들은 다른 유형과 같은 규칙을 따라하지만

  • 그리고 최초의 언어로

    는, 포트란 또는 알골처럼, 각 언어는 종종 배열을 전달하는 고유의 아주 특별한 방법을 가지고 있었다. (코볼 또는 기본 같은 일부 초기 언어, 아니 적어도 자신의 초기 변형 함수에 인수를 전달도 지원을했다.) 당신이 오늘 볼 가능성이있어 언어의 사이에

, 나는 생각 Java 모델이 우세합니다. C는 이상 값으로 남아 있으며 C++ 은 선택 사항입니다. std::vector 값으로 전달하거나 을 참조로 전달할 수 있습니다. 그러나 성능은 이유로 권장됩니다.

+0

+1. 설명해 주셔서 감사합니다. – Nabin