되는코드
#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에서 뭔가 문제가 일어난 것 같은데
무슨뜻인지 알려주시면 감사하겠습니다.
네 안됩니다요. 길이도 같이 넘겨주든가, 배열의 앞부분에 사이즈를 넣던가
포인터 너무 어렵습니다 선언할때랑 쓸때랑 다른거같아서
4바이트 주소값입니더. 사이즈오브 하면 4 나옵니더
아그럼 밑코드에서 *p는 4바이트밖에 안뜬다는 뜻인가요 배열로 취급안되고 포인터로 취급되나요 sizeof 안에선??
그러게 말입니다.
감사용