using arrays with functions c
C ++에서 함수를 사용하는 배열에 대해 알아야 할 모든 것 :
이 튜토리얼에서는 C ++의 함수에서 배열을 사용하는 방법에 대해 설명합니다. 일반적으로 배열은 변수를 함수에 전달하는 것과 같은 방식으로 함수에 인수로 전달할 수 있습니다.
그러나 형식 매개 변수의 평가는 배열과 관련하여 약간 다릅니다. 배열을 함수로 전달하는 방법을 실제로 살펴보기 전에 배열에 대한 포인터의 개념을 간략하게 논의해야합니다.
=> 여기에서 심층 C ++ 교육 자습서를 확인하십시오.
학습 내용 :
배열에 대한 포인터
피보나치 수열의 처음 5 개 숫자를 포함하는 다음 배열을 고려하십시오.
int fibSeq(5) = {1,1,2,3,5};
이 배열을 가리 키도록 fibPtr 포인터를 선언 해 보겠습니다.
int* fibPtr; fibPtr = fibSeq;
fibPtr의 내용을 인쇄 할 때 출력은 fibSeq 배열의 첫 번째 요소가됩니다. 이는 대괄호가없는 배열의 이름이 배열의 첫 번째 요소에 대한 포인터로 평가되기 때문입니다. 따라서 위의 예에서 이름 'fibSeq'는 배열 'fibSeq'의 첫 번째 요소를 가리 킵니다.
아래는 동일한 그림 표현입니다.
위의 그림 표현에서 볼 수 있듯이 fibPtr은 배열의 첫 번째 요소를 가리 킵니다. 따라서 포인터 산술을 사용하여 fibPtr을 사용하여 배열의 모든 요소를 인쇄 할 수 있습니다.
예를 들어, expression * (fibPtr + 1)은 배열의 두 번째 요소를 가리 킵니다.
osi 모델 장치는 각 계층을 사용합니다.
이것을 프로그램에 넣고 'fibSeq'및 'fibPtr'의 출력을 확인하겠습니다.
#include #include using namespace std; int main() { int fibSeq(5) = {1,1,2,3,5}; int* fibPtr; fibPtr = fibSeq; cout<<'
fibSeq points to :'<<*fibSeq; cout<<'
fibSeq(0): '<<*fibPtr; cout<<'
fibSeq(1): '<<*(fibPtr + 1); cout<<'
fibSeq(2): '<<*(fibPtr + 2); cout<<'
fibSeq(3): '<<*(fibPtr + 3); cout<<'
fibSeq(4): '<<*(fibPtr + 4); } }
산출:
fibSeq 포인트 : 1
fibSeq (0) : 1
fibSeq (1) : 1
fibSeq (2) : 2
fibSeq (3) : 3
fibSeq (4) : 5
위의 예에서 포인터 변수 fibPtr을 선언 한 다음 fibPtr에 배열 이름을 할당하여 배열을 가리 키도록합니다. 이렇게하면 fibPtr이 배열의 첫 번째 요소를 가리 킵니다. 그런 다음 fibPtr을 사용하여 배열의 모든 값을 인쇄합니다.
함수에 배열 전달
함수를 다룰 때, 함수에 변수를 전달하는 것과 비슷한 방식으로 배열을 함수에 전달합니다. 그러나 우리는 () 유형의 배열 변수를 전달하지 않습니다.
대신 배열에 포인터를 전달합니다. 즉 배열의 첫 번째 요소를 가리키는 배열의 이름입니다. 그러면이 포인터를 받아들이는 형식 매개 변수는 실제로 배열 변수입니다. 포인터를 전달할 때 함수 내부의 배열을 직접 수정할 수 있습니다.
피보나치 시퀀스에서 처음 5 개 요소의 각 요소의 제곱을 계산하여 배열이 함수로 전달되는 것을 보여주는 다음 프로그램을 고려하십시오.
#include #include using namespace std; void fibSeqSquare(int fibSeq()) { for(int i=0;i<5;i++) { fibSeq(i) *= fibSeq(i); } } int main() { int fibSeq(5) = {1,1,2,3,5}; fibSeqSquare(fibSeq); for(int i=0;i<5;i++) { cout<위의 예에서 피보나치 수열의 각 요소의 제곱을 계산합니다. 이 제곱은 함수 내에서 계산됩니다. 따라서 main에서 함수를 호출하는 동안 배열 이름을 'fibSeqSquare'함수에 전달합니다. 함수 내에서 각 요소의 제곱을 계산합니다.
포인터를 통해 배열에 대한 참조를 전달 했으므로 함수 내부의 배열을 수정하면 배열이 반영됩니다. 따라서 주 함수에서 배열을 인쇄 할 때 각 요소의 제곱을 출력으로 얻습니다.
위의 예에서 fibSeqSquare 함수의 배열 인수 (공식 매개 변수)는 배열의 크기를 지정하지 않고 대괄호 (()) 만 사용하여 배열임을 나타냅니다. 이것은 배열 인수를 지정하는 한 가지 방법입니다.
형식 매개 변수 목록에서 배열 인수를 지정하는 또 다른 방법은 대괄호 안에 배열의 크기를 지정하는 것입니다. 두 주장 모두 비슷하게 작동합니다. 이는 단순히 배열 인수를 지정하는 두 가지 방법입니다.
다음 예제는 size로 지정된 Array 인수를 보여줍니다.
#include #include using namespace std; void displayFibSeq(int fibSeq(5)) { for(int i=0;i<5;i++) { cout<위의 예에는 피보나치 수열을 표시하는 기능이 있습니다. 이 함수에는 배열의 크기도 지정하는 배열로 매개 변수가 있습니다.
위에 표시된 것과 같은 방식으로 다차원 배열을 함수에 전달할 수도 있습니다.
Eclipse에서 Java 프로젝트를 빌드하는 방법
함수에서 배열 반환
함수에서 배열을 반환 할 때 C ++에서는 함수에서 전체 배열을 반환 할 수 없습니다. 그러나 배열에 대한 포인터를 반환하는 함수를 만들 수 있습니다. 그러나 거기에는 문제가 있습니다.
다음 코드를 고려하십시오.
int* funcArray() { int arr(3) = {1,2,3}; return arr; } int main() { int* aryPtr = funcArray(); cout< 위의 프로그램은 단순히 함수에서 배열의 첫 번째 요소에 대한 포인터를 반환하지만 예상대로 수행되지 않습니다. 프로그램이 올바른 출력을 제공한다고 보장 할 수 없습니다. 올바른 출력을 제공 할 수도 있고 제공하지 않을 수도 있습니다.
자바에서 배열을 반환 할 수 있습니까?
이것은 우리가 함수에서 지역 변수를 반환하고 있고 그것이 반환 될 때까지 범위 내에 있을지 여부가 확실하지 않기 때문입니다.
따라서 간단히 말해서 C ++는 함수에서 배열을 반환하는 것을 선호하지 않습니다.
함수에서 배열을 반환해야하는 경우 다음 방법 중 하나를 사용해야합니다.
# 1) 동적으로 할당 된 배열 반환
동적으로 할당 된 배열에서 배열 포인터를 반환 할 수 있습니다. 'new'연산자를 사용하여 어레이를 동적으로 할당합니다. 동적 배열이므로 배열을 '삭제'하지 않는 한 범위 내에있게됩니다. 따라서 배열을 반환하면 프로그램이 제대로 실행됩니다.
이는 다음 예에 나와 있습니다.
#include #include using namespace std; int* funcArray() { int* arr = new int(3); arr(0)=1; arr(1)=2; arr(2)=3; return arr; } int main() { int* aryPtr = funcArray(); cout< 산출:
1 2 3
# 2) 정적 배열 반환
정적 변수 / 배열은 프로그램 전체에 걸쳐 범위가 있으므로 함수에서 정적 배열을 반환 할 수도 있습니다. 이를 증명하기 위해 예를 들어 보겠습니다. 이 예제에서 동적으로 할당 된 배열 대신 정적 배열을 사용했다는 유일한 차이점을 제외하고는 이전 예제와 동일합니다.
#include #include using namespace std; int* funcArray() { static int arr(3); arr(0)=1; arr(1)=2; arr(2)=3; return arr; } int main() { int* aryPtr = funcArray(); cout< 산출:
1 2 3
노트 : 구조체를 사용하여 그 안에 배열을 감싼 다음 해당 구조체를 반환 할 수도 있습니다. 이런 식으로 우리는 자연스럽게 함수에서 배열을 반환합니다. 그러나 이것은 배열을 반환하는 매우 실행 가능한 방법이 아닙니다.
결론
따라서이 튜토리얼에서는 함수와 관련된 배열에 대해 자세히 설명했습니다. 이 튜토리얼이 C ++ 배열과 함수에 대한 모든 의심과 오해를 제거하는 데 도움이 되었기를 바랍니다.
=> 여기에서 완벽한 C ++ 교육 가이드를 확인하십시오.
추천 도서