안녕하세요, 곧 닉변할 예정인 볼트입니다.
이번엔 C언어의 함수 'sizeof()'에 대해 다뤄보려 합니다.
sizeof()는 보통 배열의 길이를 알기 위해 사용하는 경우가 많습니다.
괄호 안에다가 변수를 쓰면 끝나는 함수이지만 까먹으면 안되는 부분이 있기 때문에저처럼 까먹고 맞왜틀 하지 마시고 꼭 읽고 도움이 되었으면 좋겠네요! ㅎㅎ
sizeof()
sizeof()라는 함수는 메모리 공간을 소모하는 크기를 'byte' 단위로 바꿔서 출력하는 함수입니다.
(그냥 길이를 재주는 함수가 아닙니다!)
저희가 변수를 만들 때 앞에 쓰는 자료형들(예: int, char, float 등)은 각자 받는 메모리의 양이 정해져 있습니다.
(1byte = 8bit, '00000000'가 1byte라고 생각하시면 됩니다.)
char | 1byte |
short | 2byte |
int | 4byte |
long | 4byte |
long long | 8byte |
float | 4byte |
double | 8byte |
long double | 16byte |
int와 long은 왜 있는 거지
Test Code - 자료형의 크기
< 코드 >
#include <stdio.h>
int main() {
printf("%d \n", sizeof(char));
printf("%d \n", sizeof(short));
printf("%d \n", sizeof(int));
printf("%d \n", sizeof(long));
printf("%d \n", sizeof(long long));
printf("%d \n", sizeof(float));
printf("%d \n", sizeof(double));
printf("%d \n", sizeof(long double));
}
< 출력 >
1
2
4
4
8
4
8
16
sizeof()는 '변수의 크기'를 구하는 함수입니다.
즉, '변수의 길이는 구하기 어렵다'라는 뜻이죠.
그런데 아까 말했듯이 배열의 길이를 구할 때는 사용할 수 있습니다.
Test Code - 변수의 크기와 배열의 크기
< 코드 >
#include <stdio.h>
int main() {
int arr[5] = { 10, 4, 23, 543, 1234 };
int arr2[10] = { 0 };
for(int q = 0; q < 5; q++) {
printf("%d ", sizeof(arr[q]));
}
printf("\n%d", sizeof(arr2));
}
< 출력 >
4 4 4 4 4
40
(편의상 변수를 배열로 했습니다. 배열은 자료형을 n개씩 모아둔 것이라 하나하나 비교한다면 상관 없습니다.)
위에 출력을 보면 int형 변수 부분은 다 '4'로 나왔지만 10자리 배열은 '40'이 나왔습니다.
배열은 같은 자료형 변수를 n개 씩 모아줬기 때문에
arr2[10] 이라는 배열이 '40'이 출력된겁니다. (4 x 10 = 40)
그러면 출력된 값에 자료형의 크기 만큼만 나눠준다면 배열의 길이를 얻을 수 있겠죠?
Test Code - 배열의 길이 구하기
< 코드 >
#include <stdio.h>
int main() {
int arr[17] = { 0 };
printf("%d", (sizeof(arr) / sizeof(int)));
}
< 출력 >
17
이렇게 블로그를 마치겠습니다.
감사합니다 :)
2023.01.13 - [Note/Unreal Engine] - 언리얼 엔진 자습 해보고 싶은데.. 언리얼 엔진 무료 자습 사이트 추천!
2022.12.04 - [Diary/코딩 잡 지식] - C/C++ 프로그래밍은 어디서 하나요? / Visual Studio IDE 깔아보기!
2022.12.04 - [Diary/코딩 잡 지식] - VS(Visual Studio)와 VSCode(Visual Studio Code) 차이가 뭐야? / VS와 VSC 차이 알아보기!
'Note > C language' 카테고리의 다른 글
[C, C++, C#] "bool"타입은 뭘까? - "boolean"에 대해 간단하게 알아보기 (1) | 2023.05.29 |
---|---|
C언어에서 함수에서 배열 반환하는 방법은? - 함수에서 배열 리턴하기 (0) | 2023.04.27 |
'C언어'로 "알림창" 띄우기! - "메시지 박스" MessageBox() 사용법 (0) | 2023.03.26 |
입출력, printf()와 scanf() / int main이랑 return 0, <stdio.h>가 뭐야? (+ scanf 오류 해결법!) [ (0) | 2022.12.04 |