인프런 커뮤니티 질문&답변

김복두님의 프로필 이미지
김복두

작성한 질문수

홍정모의 따라하며 배우는 C언어

6.16 배열과 런타임 에러

5:40 질문이요!

해결된 질문

작성

·

346

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

김복두님의 프로필 이미지
김복두
질문자

아하 그렇군요. 감사합니다!

김복두님의 프로필 이미지
김복두

작성한 질문수

질문하기