본문 바로가기

C

([C언어] 13강) sizeof연산자로 배열 길이 구하기

저번 시간에 하드코딩에 대해 배웠습니다.

 

이번시간에는 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] 제목과 내용에 "함수"로 설명된 부분을 "연산자"로 정정했습니다. 썸네일은 바꾸지 못했습니다.