되는코드

#include <stdio.h>


double avr(double *,int);


int main()

{

double ary[] = { 1.5,20.1,16.4,2.3,3.5 };

int size = sizeof(ary) / sizeof(double);

printf("%.2lf", avr(ary,size));


return 0;

}

double avr(double *p, int n)

{

int a;

double ans=0;

for (a = 0; a < n; a++)

{

ans += p[a];

}

return ans/5;

}

안되는코드
#include <stdio.h>

double avr(double *);

int main()
{
double ary[] = { 1.5,20.1,16.4,2.3,3.5 };
printf("%.2lf", avr(ary));

return 0;
}
double avr(double *p)
{
int a;
double ans=0;
for (a = 0; a < sizeof(*p) / sizeof(double); a++)
{
ans += p[a];
}
return ans/5;
}
묻고싶은건

메인함수에서 sizeof를 쓸 때 배열의 주소값을 쓰면 전체 배열의 크기가 나오는데

밑의 안되는 코드에선 avr함수로 따로 뺐습니다. 이때 매개변수로 포인터를 썼는데

만약 avr 함수에서 배열의 주소를 받으면 *p는 ary가 되는게 아닌가요?

위 코드와 밑의 코드에서 ans에 대입하는 과정에서의 차이는 없는걸로 보았을때 sizeof에서 뭔가 문제가 일어난 것 같은데

무슨뜻인지 알려주시면 감사하겠습니다.