배열 초기화 사소한 Tip

2019. 9. 26. 22:44·C/C

 

 

배열을 선언하며 초기화 할때 

짚고 넘어가면 좋은 팁을 메모하고 가자.

 

  1. 초기화를 하지 않으면 당연히 쓰레기 값이 들어갈 위험 高

  2. N개의 원소를 가지는 배열에 N보다 적은 갯수의 원소를 초기화 할 경우 나머지 원소가 자동 0으로 초기화

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
void main(void)
{    
int i = 0;
    int arr[10] = {1}; // 10개 원소중 첫 원소만 1로 초기화 함.
    for( ;  i < sizeof(arr) / sizeof(int); i++)
    {
        printf("arr[%d] : %d\n", i, arr[i]);
    }
    
    return;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
 첫번째 원소만1    나머지는 0으로

 

3. 콤마는 영향을 미치지 않음.

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
void main(void)
{    
int i = 0;
    int arr[10] = {1, 2, 3, }; // 콤마가 포함된다면? 나머지는?
    for( ;  i < sizeof(arr) / sizeof(int); i++)
    {
        printf("arr[%d] : %d\n", i, arr[i]);
    }
    
    return;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter

1,2, 3이후 나머지 자동 0초기화

만약 arr[10] = {1, } 이라고 작성했다고치면

?? 콤마있으니까 나머지 원소도 1로 초기화 될것만 같은 착각을 불러 일으키고

 

실제로 나는 이 착각 때문에 삽질을...

 

 

4. 배열초기화 함수 memset의 함정

Interface void * memset(void *ptr, int value, size_t num)
Header string.h //  <cstring> in C++
Parameter

ptr: 초기화할 배열의 주소

value: 초기화할 원소의 값

num: 초기화할 바이트 수

Function

특정 배열의 원소를 원하는 값으로 초기화한다.

※단, 1바이트씩 값을 대입하는 식으로 초기화한다.

 

다음 예제를 살펴보자.

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <string.h>
 
int main(void)
{
    int i = 0;
    int arr[10];
    
   memset(arr, 4, sizeof(arr));
    
    for(; i < sizeof(arr) / sizeof(int); i++)
    {
        printf("arr[%d]의 값: %d\n", i, arr[i]);
    }
    return 0;
    
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter

 

당연히 모든 배열값이 '4'로 초기화될 줄 알았지만..

띠용?? 왜 쌩둥맞은..?

memset의 내부 구현을 들여다보면

'1바이트 단위'로 값을 입력한다고 되어있다.

 

현재 arr 배열에 대해 총 40바이트 (int형 4 * 10개 원소 )가 할당 되어있지만

매 int형 4바이트마다 16진수로 표현시

0x04040404 << 요놈을 1set(4byte)씩 10묶음..

이를 10진수로 표현하면? 

실행 결과값과 같은 표현이된다.

때문에 memset함수는 주로 character형 한 문자 단위로 초기화 하는데 사용된다.

(∵ character형은 C에서 1byte단위로 저장& 표현되기 때문이다.)

'C > C' 카테고리의 다른 글

Memory Map 이해하기(Feat.성적처리 프로그램 소스)  (0) 2019.10.02
2차원 배열 이해  (0) 2019.09.29
성적 처리 프로그램 (분석->설계->구현)  (0) 2019.09.20
선택정렬 구현해보기 (feat. Flow Chart)  (0) 2019.09.17
calloc 함수  (0) 2019.06.10
'C/C' 카테고리의 다른 글
  • Memory Map 이해하기(Feat.성적처리 프로그램 소스)
  • 2차원 배열 이해
  • 성적 처리 프로그램 (분석->설계->구현)
  • 선택정렬 구현해보기 (feat. Flow Chart)
M_Falcon
M_Falcon
  • M_Falcon
    Falcon
    M_Falcon
  • 전체
    오늘
    어제
    • 분류 전체보기 (429)
      • Web (16)
        • Nodejs (14)
        • Javascript (23)
        • FrontEnd (4)
      • DataBase (39)
        • Fundamental (1)
        • Redis (4)
        • PostgreSQL (10)
        • NoSQL (4)
        • MySQL (9)
        • MSSQL (3)
        • Error (4)
      • Algorithm (79)
        • Algorithm (문제풀이) (56)
        • Algorithm (이론) (23)
      • JVM (64)
        • Spring (13)
        • JPA (5)
        • Kotlin (13)
        • Java (23)
        • Error (7)
      • 기타 (68)
        • Kafka (3)
        • Kubernetes (3)
        • Docker (12)
        • git (19)
        • 잡동사니 (26)
      • 재테크 (11)
        • 세무 (4)
        • 투자 (3)
        • 보험 (0)
      • BlockChain (2)
        • BitCoin (0)
      • C (32)
        • C (10)
        • C++ (17)
        • Error (3)
      • Low Level (8)
        • OS (3)
        • 시스템 보안 (5)
      • 네트워크 (3)
      • LINUX (30)
        • Linux (26)
        • Error (4)
      • 저작권과 스마트폰의 이해 (0)
      • 생각 뭉치 (6)
      • 궁금증 (2)
      • Private (4)
        • 이직 경험 (0)
        • 꿈을 찾아서 (1)
      • Android (21)
        • OS (4)
  • 블로그 메뉴

    • 홈
    • WEB
    • 알고리즘
    • DataBase
    • Linux
    • Mobile
    • C
    • 방명록
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    PostgreSQL
    프로그래머스
    백준
    android
    kafka
    Git
    C++
    algorithm
    javascript
    알고리즘
    Bitcoin
    Programmers
    Kotlin
    docker
    JPA
    ubuntu
    database
    java
    linux
    Spring
  • hELLO· Designed By정상우.v4.10.3
M_Falcon
배열 초기화 사소한 Tip
상단으로

티스토리툴바