출처: http://hururuc.tistory.com/12
보통 배열의 크기를 알아낼때 sizeof(xx)/sizeof(*xx) 를 많이 쓰는데, 함수로 전달된 배열에서는 그게 잘 안되더군요. 구글링을 해보니 출처에서 다음과 같이 정리해놓으셨네요.
[함수 인수로 배열을 전달시에 유의점]
- C에서 함수의 인수로 배열을 전달하는 것은 제공하지 않음. Only 포인터만 전달 가능.
ex) int func( int array[10] ) {
return sizeof(array);
}
// 여기서 반환값은 sizeof(int) * 10, 즉 40이 아니고, sizeof(void *), 즉 4가 된다.
- 결과적으로, C에서 함수를 정의할 때
void func(int ar[])
void func(int *ar)
void func(int ar[10])
이 세 표기는 완전히 동일함. 단지 위와 같이 사용하는 이유는, 사용자가 배열을 넘기는지, 혹은 포인터를 넘기는 지 강조해 줄 수 있기 때문이다. 또한, 사용자가 함수 내에서 배열 크기를 원한다면, 배열의 시작 번지와 함께 크기를 나타내는 인수를 따로 추가하여 전달해야 한다.
// 여기서 반환값은 sizeof(int) * 10, 즉 40이 아니고, sizeof(void *), 즉 4가 된다.
- 결과적으로, C에서 함수를 정의할 때
void func(int ar[])
void func(int *ar)
void func(int ar[10])
이 세 표기는 완전히 동일함. 단지 위와 같이 사용하는 이유는, 사용자가 배열을 넘기는지, 혹은 포인터를 넘기는 지 강조해 줄 수 있기 때문이다. 또한, 사용자가 함수 내에서 배열 크기를 원한다면, 배열의 시작 번지와 함께 크기를 나타내는 인수를 따로 추가하여 전달해야 한다.
'개발 > Visual C++' 카테고리의 다른 글
DLL의 기본 (0) | 2016.02.03 |
---|---|
CString의 TrimRight() Method (0) | 2015.12.03 |
VS2010 컴파일시 ToolsVersion = "12.0" 경고 해결 방법 (0) | 2015.05.27 |
VS2013 error LNK2026 대처 방법 (0) | 2014.10.10 |
VS2013 GLUT 설정 (0) | 2014.10.02 |