[c++] 참조로 배열 전달

정적 할당 배열을 참조로 전달하는 방법은 무엇입니까?

void foo(int (&myArray)[100])
{
}

int main()
{
    int a[100];
    foo(a);
}

않습니다 (&myArray)[100]참조 어떤 배열을 전달하는 어떤 의미 또는 단지 구문이? 별도의 괄호와 큰 괄호가 여기에 이해되지 않습니다. 감사.



답변

배열 참조의 구문입니다 (&array). (잘못된) 참조 배열이 아닌 배열에 대한 참조를 컴파일러에 명확히하기 위해 사용해야 합니다 int & array[100];.

편집 : 약간의 설명.

void foo(int * x);
void foo(int x[100]);
void foo(int x[]);

이 세 가지는 동일한 기능을 선언하는 다른 방법입니다. 그것들은 모두 int *매개 변수 를 취하는 것으로 취급되며 크기 배열을 전달할 수 있습니다.

void foo(int (&x)[100]);

100 개의 정수 배열 만 허용합니다. 안전하게 사용할 수 있습니다 sizeofx

void foo(int & x[100]); // error

이것은 “참조의 배열”로 해석되는데, 이는 합법적이지 않습니다.


답변

필요한 구문 일뿐입니다.

void Func(int (&myArray)[100])

^ int매개 변수 이름은 참조 로 100의 배열을 전달합니다 myArray.

void Func(int* myArray)

^ 배열을 전달하십시오. 배열이 포인터로 감소합니다. 따라서 크기 정보가 손실됩니다.

void Func(int (*myFunc)(double))

^ 함수 포인터를 전달하십시오. 이 함수는 inta를 반환하고 a를 사용 double합니다. 매개 변수 이름은 myFunc입니다.


답변

구문입니다. 함수 인수에서 int (&myArray)[100]를 묶는 괄호 &myArray가 필요합니다. 당신이 그들을 사용하지 않는 경우, 당신은 통과 될 것입니다 array of references및이 때문이다 subscript operator []오버 더 높은 우선 순위를 갖습니다 & operator.

예 : int &myArray[100] // array of references

따라서이를 사용 type construction ()하면 컴파일러에게 100 개의 정수 배열에 대한 참조를 원한다고 알 수 있습니다.

예 : int (&myArray)[100] // reference of an array of 100 ints


답변

배열은 기본적으로 포인터에 의해 전달됩니다. 더 나은 이해를 위해 함수 호출 내에서 배열을 수정할 수 있습니다.


답변

다음은 참조로 모든 크기와 유형의 배열을 취하는 일반 함수를 작성합니다.

template<typename T, std::size_t S>
void my_func(T (&arr)[S]) {
   // do stuff
}

코드를 가지고 놀아 라.


답변