본문 바로가기
HW 프로그래밍/아두이노

sizeof(...)

by N2info 2021. 1. 18.

아두이노를 다루다 보면 여러 핀들이 필요하여 스케치에서 핀들을 배열로 정의하여 사용할 경우가 있습니다. 이 때 사용된 핀의 개수를 sizeof 연산자를 사용하여 쉽게 얻을 수 있으며, 핀들을 추가하거나 제거할 때 핀 배열에 핀들만 추가하거나 없애는 것으로 수정할 수 있습니다. <- 배열의 개수를 숫자로 입력하는 하드 코딩을 없애 스케치를 쉽게 수정할 수 있다는 의미입니다^^.

 

sizeof(배열 변수 이름)/sizeof(배열 변수 자료형) 

 

sizeof 연산자를 사용하면 bool, char, int, short, long, float, double 등과 같은 자료형 혹은 변수들의 크기를 알아낼 수 있습니다. 이 때의 크기란 메모리를 차지하는 최소 단위인 바이트를 의미합니다. 그렇기 때문에 배열의 개수를 얻으려면 sizeof(배열 변수 자료형) 값으로 배열의 크기 값을 나눠주어야 실제 개수를 얻을 수 있습니다.

 

간단하게 각 자료형의 크기를 출력하고 char와 int로 핀 배열을 만들어 핀 배열들의 크기와 개수를 출력하고, float 배열을 만들어 float 배열의 크기와 개수를 출력하게 예제 스케치를 만들어 보았습니다:

 

/*
* sizeof(...)
*
* 이 스케치는 sizeof 연산자를 사용하여 자료형의 크기와 배열과
* 같은 변수들의 크기와 배열의 개수를 알아내는 예제입니다.
*
* 이 예제 코드는 공유 저작물입니다.
*
*/ 
void setup() { 
  // 여기에 초기화 부분을 넣어 주세요. 이것은 한번만 실행됩니다. 
  char prompt[] = "sizeof 예제"; 
   
  char c_pins[] = {2, 3, 4, 5, 6};        // char 핀 배열 
  int i_pins[] = {2, 3, 4, 5, 6};         // int 핀 배열 
  int pins = sizeof(i_pins)/sizeof(int);  // i_pins[]의 개수 
 
  float f_numbers[] = {0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7}; 
  int numbers = sizeof(f_numbers)/sizeof(float); 
   
  // 시리얼 모니터로 출력을 위하여 시리얼 포트를 초기화합니다. 
  Serial.begin(9600); 
 
  // 시리얼 모니터로 시작 안내문을 출력합니다: 
  Serial.println(); 
  Serial.println(prompt); 
  Serial.println("============="); 
   
  // 각각의 자료형의 크기를 출력합니다:  
  Serial.print("bool      : "); Serial.println(sizeof(bool)); 
  Serial.print("char      : "); Serial.println(sizeof(char)); 
  Serial.print("short     : "); Serial.println(sizeof(short)); 
  Serial.print("int       : "); Serial.println(sizeof(int)); 
  Serial.print("long      : "); Serial.println(sizeof(long)); 
  Serial.print("long long : "); Serial.println(sizeof(long long)); 
  Serial.print("float     : "); Serial.println(sizeof(float)); 
  Serial.print("double    : "); Serial.println(sizeof(double)); 
 
  // 변수들의 크기를 출력합니다: 
  Serial.println();  
  Serial.print("c_pins    : "); Serial.println(sizeof(c_pins)); 
  Serial.print("i_pins    : "); Serial.println(sizeof(i_pins)); 
  Serial.print("pins      : "); Serial.println(pins); 
  Serial.print("f_numbers : "); Serial.println(sizeof(f_numbers)); 
  Serial.print("numbers   : "); Serial.println(numbers); 
   
}  
 
void loop() { 
  // 여기에 주 처리 부분을 넣어 주세요. 이것은 반복 실행됩니다. 
 
} 

실행 결과

=========

스케치를 업로드하고 시리얼 모니터 창을 열면 결과가 출력 되어 바로 확인할 수 있습니다.

 

 

출처 : m.blog.naver.com/msyang59/220813359868