해결된 질문
작성
·
359
1
#define NUM_DAYS 5
int main(void)
{
int a = 5;
int b[NUM_DAYS];
printf("%d\n", sizeof(a));
printf("%d\n", sizeof(b));
return 0;
}
여기서 제가 생각했던것은 a가 int형 이므로 4byte를 가질거라고 생각했고, b도 마찬자기로 int형이므로 4byte를 가질거라고 생각해서
4
4 가 출력될거라고 생각했습니다.
그런데 출력값은
4
20이 나왔습니다. 왜그런건가요?
선생님께서 5:40 쯤에 선생님께선 '타입의크기 곱하기 레터럴상수'를 해주시는데,
그러면 printf("%d\n", sizeof(a)); 이것도 '타입의크기 곱하기 레터럴 상수'로 해줘야되는거 아닌가요? 출력값이 20이 나와야되는것 아닌가요?
답변 3
2
"printf("%d\n", sizeof(a)); 이것도 '타입의크기 곱하기 레터럴 상수'로 해줘야되는거 아닌가요?"
이건 그냥 코드 그대로 a 라는 변수의 크기를 출력해보는 코드일뿐입니다. 굳이 타입의크기 곱하기 레터럴 상수를 해줄 이유는 없습니다.
배열은 같은 자료형의 데이터가 연속적으로, 즉 이웃 사이로 몰아 넣을 수 있는 고정된 크기의 자료구조입니다. b 는 int 가 5 개 저장될 수 있는 "배열"이기 때문에 4 * 5 = 20 (타입의크기 곱하기 레터럴 상수)이 되는 것이구요!
제가 커리큘럼을 찾아보니 질문자님께서 들으신 이 강의가 배열을 처음으로 접하게 되는 부분인것 같네요. 배열은 챕터 10 에서 아주 자세하게 배우기 시작합니다. 나중에 자세하게 배우니 그냥 아 이런거구나 정도로만 이해해주시면 될 것 같아요 ㅎㅎ
1
안녕하세요. 바이트의 크기는 아래의 메모리크기 * 레터럴 상수인데 int a = 5;의 경우 메모리크기는 4(int)고, 레터럴 상수는 1(a는 요소가 하나만있다)입니다. 여기서 알 수 있는것은 "변수의 값은 상관없다."입니다.
다음은 int b[NUM_DAYS]인데 int b[5]와 똑같습니다.
int b[5]의 5는 배열의 길이라는 뜻입니다.
그래서 int b[5]; == int b = {0, 0, 0, 0, 0};입니다.
위 int b배열에는 몇개의 요소가 있나요? 정답은5개입니다.
따라서 4(int) * 5(b는 배열이기에 요소가 다섯개있다.) = 20입니다.
0
배열은 아직안배웠군요ㅎㅎ 이미알고있을거라생각해서 답변을 했습니다.