C에서 동적 배열 크기 알아내기.
글쓴이: aeronova / 작성시간: 토, 2004/04/10 - 11:17오후
안녕하세요.
C에서 인자로 넘겨준 동적 배열의 크기를 알아내려고 sizeof를
사용했는데 생각과 다르게 움직입니다.
이유를 종잡을 수 없네요..ㅠㅠ
#include<stdio.h> #include<stdlib.h> void foo(float array[]); void foo(float array[]) { int length = sizeof(array)/sizeof(float); printf("length = %d\n", length); } int main() { float array[] = {1. , 2.}; printf("length of array = %d\n", sizeof(array)); printf("length of float = %d\n", sizeof(float)); foo(array); }
결과는 다음과 같습니다.
length of array = 8 length of float = 4 length = 1
음.. length가 2가 나와야 되는데 왜 1이 나오는지..ㅠㅠ
조언 부탁드립니다.
p.s.
gcc 3.3.2를 씁니다.
Forums:
foo 에서 인자로 받는 float array[] 는 배열이 아니라 포인
foo 에서 인자로 받는 float array[] 는 배열이 아니라 포인터입니다.
진리를 나의 수준으로 끌어내리지 마라.
나를 진리의 수준으로 끌어올려라. - 배꼽 중에서
흠.. 저도 초보라서 확실한지는 잘 모르겠습니다만...아마 foo()
흠.. 저도 초보라서 확실한지는 잘 모르겠습니다만...
아마 foo() 함수에서 처리한 것은 array배열이 아닌 array를 가르키는 포인터를 가지고 계산한 것 같습니다.
결국 포인터의 크기 4byte / float형의 크기 4byte를 계산한 셈이지요.
헉 그렇군요..
그럼 따로 array의 크기를 넘겨주지 않고 foo내부에서 인자로 받은
array의 갯수를 알아내는 법은 없나요?
It's better to burn out than to fade away. -- Kurt Cobain.
아마 정상적인(?) 방법으로는 없어서function(char *b
아마 정상적인(?) 방법으로는 없어서
function(char *buffer, size_t len);
이런 식으로 넘겨주는 게 아닐까요...?
댓글 달기