C에서 동적 배열 크기 알아내기.

aeronova의 이미지

안녕하세요.
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를 씁니다.

dondek의 이미지

foo 에서 인자로 받는 float array[] 는 배열이 아니라 포인터입니다.

진리를 나의 수준으로 끌어내리지 마라.
나를 진리의 수준으로 끌어올려라. - 배꼽 중에서

kernelpanic의 이미지

흠.. 저도 초보라서 확실한지는 잘 모르겠습니다만...
아마 foo() 함수에서 처리한 것은 array배열이 아닌 array를 가르키는 포인터를 가지고 계산한 것 같습니다.
결국 포인터의 크기 4byte / float형의 크기 4byte를 계산한 셈이지요.

aeronova의 이미지

그럼 따로 array의 크기를 넘겨주지 않고 foo내부에서 인자로 받은
array의 갯수를 알아내는 법은 없나요?

It's better to burn out than to fade away. -- Kurt Cobain.

맹고이의 이미지

아마 정상적인(?) 방법으로는 없어서

function(char *buffer, size_t len);

이런 식으로 넘겨주는 게 아닐까요...?