Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 따라하면서 배우는 C언어
- Python
- String
- DP
- Algospot
- sorting
- 따라하며 배우는 C언어
- JavaScript
- greedy
- web
- 생활코딩
- 인프런
- 정수론
- udemy
- C
- 종만북
- graph
- programmers
- 따배씨
- BFS
- Cleancode
- 백준
- Math
- dfs
- php
- C언어
- Algorithm
- server
- BASIC
- BOJ
Archives
- Today
- Total
몽상실현개발주의
[따배씨] 4.2 sizeof 연산자 본문
따배씨 - 따라하며 배우는 C언어
4강 문자열과 형식 맞춘 입출력
4.2 sizeof 연산자
#include <stdio.h>
int main(){
/* 1. sizeof basic types */
int a = 0;
unsigned int int_size1 = sizeof a;
unsigned int int_size2 = sizeof(int);
unsigned int int_size3 = sizeof(a);
// 함수의 형태로 사용되나 연산자
size_t int_size4 = sizeof(a);
size_t float_size = sizeof(float);
printf("Size of int type is %u bytes.\n", int_size1);
printf("Size of int type is %zu bytes.\n", int_size4);
printf("Size of int type is %zu bytes.\n", float_size);
// %zu: size_t 에 대응하는 형식 지정자
return 0;
}
- sizeof 의 표기
- sizeof a == sizeof(int) == sizeof(a);
- size_t
- unsigned int 이지만, 운영체제 상에서 가능한 오브젝트의 최대 크기를 저장하도록 할당
- 32bit 운영체제에서는 32bit unsigned integer, 64bit 에서는 64bit unsigned integer
- unsigned int 의 경우에는 64bit 운영체제라도 32bit unsigned integer 일 수도 있다는점이 차이
- %zu: size_t 에 대응하는 형식 지정자
- unsigned int 이지만, 운영체제 상에서 가능한 오브젝트의 최대 크기를 저장하도록 할당
#include <stdio.h>
#include <stdlib.h> // malloc() - memory allocation
int main(){
/* 2. sizeof arrays */
int int_arr[30];
int* int_ptr = NULL;
int_ptr = (int*)malloc(sizeof(int)*30);
printf("Size of array = %zu bytes\n", sizeof(int_arr));
printf("Size of pointer = %zu bytes\n", sizeof(int_ptr));
return 0;
}
int* int_ptr = NULL
- 포인터를 사용하여 주소값을 저장할수 있는 공간 생성
int_ptr = (int*)malloc(sizeof(int) * 30);
- 30개의 정수를 저장 할 수 있는 배열 (메모리 공간) 을 요청
- 대표하는 메모리 주소(첫번째 주소)를 int_ptr 에 저장
printf("Size of array = %zu bytes\n", sizeof(int_arr));
- 정수 30개가 저장될 배열의 메모리 크기인 120 bytes 가 출력됨
- int_arr[30]의 경우 실제 120byte의 공간을 할당 받음
- int_arr 이 변수로 사용될 때에만 주소값 형태로 바뀌어 사용된다고 해석 됨
- 복잡하게 생각할 것 없이 주소값이라고 생각하면 편함
printf("Size of pointer = %zu bytes\n", sizeof(int_ptr));
- 배열의 대표 주소값(정수) 이 저장될 공간인 8byte 출력
int int_arr[30];
int_ptr = (int*)malloc(sizeof(int)*30);
- int int_arr[30]: 컴파일 되는 메모리 공간 120byte를 할당
- malloc(): 런타임에서 메모리 공간이 결정됨
#include <stdio.h>
int main(){
/* 3. sizeof character array */
char c = 'a';
char string[10];
size_t char_size = sizeof(char);
size_t str_size = sizeof(string);
printf("Size of char = %zu bytes\n", char_size); // 1 byte
printf("Size of string = %zu bytes\n", str_size); // 10 byte
return 0;
}
char string[10];
- maximally 9 character + '/0' (null character)
- 저장공간의 마지막에 null character 하나를 저장하여야 하기 때문에 공간 하나를 사용하지 못함
#include <stdio.h>
struct Mystruct
{
int i;
float f;
};
int main(){
/* 4. sizeof structure */
printf("Size of structure = %zu bytes\n", sizeof(struct Mystruct));
return 0;
}
- struct(구조체) 의 경우 사용한 자료형의 메모리 합으로 할당 됨
이 글의 모든 사진과 내용의 출처는 홍정모 교수님께 있음을 알려드립니다.
http://blog.naver.com/atelierjpro
http://www.inflearn.com/course/following-c
'Language > C' 카테고리의 다른 글
[따배씨] 4.4srlen() 함수 (0) | 2021.05.13 |
---|---|
[따배씨] 4.3 문자열이 메모리에 저장되는 구조 (0) | 2021.05.12 |
[따배씨] 4.1 문자열 입출력 하기 (0) | 2021.05.12 |
[따배씨] 3.13 불리언형 ~ 3.14 복소수형 (0) | 2021.05.11 |
[따배씨] 3.12 부동소수점형의 한계 (0) | 2021.05.11 |
Comments