저번 시간에 하드코딩에 대해 배웠습니다.
이번시간에는 sizeof연산자에 대해 배울건데요
sizeof연산자란 함수처럼 사용하여 매개변수로 넘어온것의
메모리 크기를 알려주는 연산자입니다.
사용법은
sizeof(크기를 구할 값) |
이렇게 할 수 있는데요!
자 그럼
sizeof(int);
이렇게 하면 무슨값이 나올까요?
int는 4바이트 이므로 4가 나옵니다!
자 그럼 아래 코드의 실행 결과를 맞춰볼까요?
#include <stdio.h>
int main()
{
int arr[30];
printf("%d",sizeof(arr));
}
이 코드의 수행결과는 어떻게 될까요?
sizeof연산자의 매개변수로 길이 30의 int형 배열이 들어갔습니다
int의 메모리크기가 4바이트이고 4바이트가 30개 있으니
4 * 30 = 120이겠네요!
화면에 120이 출력되겠죠?
맞네요!
근데 우리가 알고 싶은건 30이라는 배열의 길이였습니다..
저렇게 120까지 나오길 바라지 않아요.. 그러면 어떻게 하면되나요?
아..! arr이 int형 배열이였으니 int의 메모리 크기로 나눠주면 되겠네요!
sizeof(arr) / sizeof(int);
이렇게 하면 arr의 길이가 나오겠죠?
자 그럼 저번시간의 그 하드코딩 코드를 이 방법을 써서 하드코딩을 하지 않고
짜볼게요!
#include <stdio.h>
int main()
{
int arr[10];
int arrayLength = sizeof(arr) / sizeof(int);
for (int i = 0; i < arrayLength; i++)
{
arr[i] = 0;
}
for (int i = 0; i < arrayLength; i++)
{
printf("%d", arr[i]);
}
for (int i = 0; i < arrayLength; i++)
{
arr[i] = 1;
}
for (int i = 0; i < arrayLength; i++)
{
printf("%d", arr[i]);
}
}
위와 같이 코딩하면 arr[]의 대괄호 속의 길이만 변경해줘도 하드코딩을하지않고도
원하는 결과를 얻을수 있겠죠?
그럼 2차원배열의 세로길이 가로길이를 모두 구하고싶습니다!
어떻게하면 될까요?
#include <stdio.h>
int main()
{
int arr[15][20];
int v = sizeof(arr) / sizeof(arr[0]);
int h = sizeof(arr[0]) / sizeof(int);
printf("arr의 세로길이 : %d\narr의 가로길이 : %d", v, h);
}
이렇게 할수있겠네요!
이제 for문에서 배열을 사용할때 어떻게해야할지
배열의 길이가 필요할때 하드코딩 없이 어떻게해야할지
감이 좀 오시나요~?
오늘 내용은 여기서 마치도록 하겠습니다!
수고하셨습니다!
[수정] 정정합니다 sizeof는 함수가 아니라 연산자입니다!
[수정2] 제목과 내용에 "함수"로 설명된 부분을 "연산자"로 정정했습니다. 썸네일은 바꾸지 못했습니다.
'C' 카테고리의 다른 글
([C언어] 15강) 포인터와 어드레스연산자 (0) | 2019.06.27 |
---|---|
([C언어] 14강) 함수의 생성과 반환값 (0) | 2019.06.27 |
([C언어] 12강) define과 하드코딩 (0) | 2019.06.27 |
([C언어] 11강) 2차원 배열 (0) | 2019.06.27 |
([C언어] 10강) 배열 (0) | 2019.06.26 |