malloc 에 관한 질문
잔디
질문 제목 : 이거 해석좀 해주세요 첫번째 scanf 가 나타내는 거랑 두번째 scanf 가 나타나는게 먼지 모르겠습니다.
sum이 무엇의 합을 나타내는거죠??
그리고 malloc 앞에 (int*)를 안붙여주면 에러가 나는데 왜그러는 건가요??ㅠ
질문 내용 : #include stdio.h
#include stdlib.h
int main(void)
{
int *a, i, n, sum = 0;
printf(\n%s, an array will be created dynamically.\n\n
input an array size n followed by n integers: );
scanf(%d , &n );
a = (int*)malloc(n * 4 );/* get space for n ints */
for ( i = 0; i n; ++i )
scanf(%d, &a[ i ] );
for ( i = 0; i n; ++i )
sum += a[ i ];
free(a);/*free the space */
printf(\n%s%7d\n%s%7d\n\n,
number of elements: , n,
sum of the elements: , sum );
return 0;
}
-
봉봉
#include stdio.h
#include stdlib.h
int main(void)
{
\tint *a, i, n, sum = 0;
\tprintf(\\\n%s\ -
지희
음...
scanf()함수로 n변수에 받은 것은 a변수가 가리킬 메모리의 크기와 관련되었습니다.
그리고 sum변수는 a[0]에서 a[3]까지의 합을 가집니다.
언짢다 하지 마세요. 배열 부분을 다시 익혀보는 것이 좋을 것 같네요. -
가장
첫번째 scanf가 받는값은 a의 크기가 맞나요?? 두번째 scanf가 받는 값은 무엇인가요??
그리고 sum이 나타내는건 무엇인가요? -
도널드
malloc() 앞에 (int*)를 붙여야 하는 이유는
malloc()함수의 리턴타입은 void*입니다.
그리고 이 값을 받는 변수 a는 int* 타입이구요.
서로 타입이 맞지 않으면 대입이 이루어지지 않기 때문에 void* 타입인 리턴값을 int*타입으로 타입캐스팅하는 것입니다.
반드시 해야만 하는 일이라고 보세요. -
으뜸
아.. 수정합니다.
int a[n]; 인것처럼이지요. -
파라나
a = (int*)malloc(n * 4 );
malloc()함수 호출이 성공적으로 이루어졌다면
a변수는 int a[4];인것처럼 사용할 수 있게 됩니다.