C++ 배열을 함수 파라미터로 넘겼을 때 함수에서 배열 크기를 알아내는 방법
글쓴이: barivari / 작성시간: 월, 2011/05/09 - 3:55오후
예를 들어
int main()
{
int temp[] = { 1, 2, 3, 4};
int size = sizeof(temp) / sizeof(temp[0]);
foo(temp);
}
void foo(int p[])
{
int size = sizeof(p) / sizeof(p[0]);
}
위 main에서의 size값은 배열 원소 갯수인 4가 출력되지만 아래 foo에서는 p가 포인터형식으로 넘어가 실제 배열 사이즈 계산이 안되는 거 같습니다.
혹시 배열을 함수 파라미터로 넘겼을 때 함수쪽에서 배열 크기를 알아낼 수 있는 방법은 없을까요?
미리 감사드립니다.
Forums:
저게 안되지 않나요? 항상 배열 포인터와 갯수를 같이
저게 안되지 않나요?
항상 배열 포인터와 갯수를 같이 넘겼던 것 같은데.
벡터를 쓰면 가능합니다.
포인터는 안 되고 참조는 가능한 것으로 알고 있습니다.
그리고 참조는 매개변수에 배열 갯수를 정확히 상수로 표기해야 하는 것으로 알고 있습니다.
보통 잘 안 쓰이는데 template 잘 쓰시는 분들이 활용하더군요.
C++ 에서는 배열이나 함수가 포인터로 변환되는 것을 Decay(부식: 그러니까 모든 정보를 온전히 갖지 못한다는 이야기)라고 하더라고요.
실행시간에 결정되는 요소라면 위에 분이 쓰신대로 하셔야 합니다.
template<typename T, size_t
반환해주삼.
가급적이면 class 내부의 enum trick 혹은 staic const int 를!!!
함수 template입니다만
함수 template입니다만 ...
class라니!!!
요~런 것
http://heifner.blogspot.com/2008/04/c-array-size-determination-part-2.html
대령했사옵니다~
위분 말씀처럼 template으로 사이즈와 요소
위분 말씀처럼 template으로 사이즈와 요소 갯수를 구할 수 있습니다.
하지만 어짜피 기존 코드를 고쳐야 하기 때문에 C++을 쓴다면 기본 배열보다는 벡터같은 stl 컨테이너를 사용하는게 더 좋은 방법입니다.
댓글 달기