programing

참조로 배열 전달

starjava 2023. 6. 11. 10:13
반응형

참조로 배열 전달

참조를 통해 정적으로 할당된 어레이를 전달하는 방법은 무엇입니까?

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])

100개의 패스 배열int참고로 매개변수 이름은myArray;

void Func(int* myArray)

배열을 전달합니다.배열이 포인터로 감쇠합니다.따라서 크기 정보가 손실됩니다.

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

함수 포인터를 전달합니다.함수는 다음을 반환합니다.int그리고.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
}

암호를 사용합니다.

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

언급URL : https://stackoverflow.com/questions/5724171/passing-an-array-by-reference

반응형