정적 할당 배열을 참조로 전달하는 방법은 무엇입니까?
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 개의 정수 배열 만 허용합니다. 안전하게 사용할 수 있습니다 sizeof
에x
void foo(int & x[100]); // error
이것은 “참조의 배열”로 해석되는데, 이는 합법적이지 않습니다.
답변
필요한 구문 일뿐입니다.
void Func(int (&myArray)[100])
^ int
매개 변수 이름은 참조 로 100의 배열을 전달합니다 myArray
.
void Func(int* myArray)
^ 배열을 전달하십시오. 배열이 포인터로 감소합니다. 따라서 크기 정보가 손실됩니다.
void Func(int (*myFunc)(double))
^ 함수 포인터를 전달하십시오. 이 함수는 int
a를 반환하고 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
}