몽상실현개발주의

[따배씨] 10.2 배열의 기본적인 사용 방법 본문

Language/C

[따배씨] 10.2 배열의 기본적인 사용 방법

migrationArc 2021. 6. 4. 10:35

[따배씨] 10.2 배열의 기본적인 사용 방법

따배씨 - 따라하며 배우는 C언어

10강 배열과 포인터

10.2 배열의 기본적인 사용 방법

#include <stdio.h>

#define MONTHS 12   // symbolic constant, mecro

int main(){
    int high[MONTHS] = {2, 5, 11, 18, 23, 27, 29, 30, 26, 20, 12, 24};
    
    for (int i = 0; i < MONTHS; ++i)
        printf("%d ", high[i]);
    printf("\n");
    
    float avg = 0.0;
    for (int i = 0; i < MONTHS; ++i)
        avg += high[i];
    
    printf("Average = %f\n", avg / (float)MONTHS);
    
    return 0;
}
#include <stdio.h>

#define MONTHS 12   // symbolic constant, mecro

int main(){
    int high[MONTHS] = {2, 5, 11, 18, 23, 27, 29, 30, 26, 20, 12, 24};
    
    printf("%p %p\n", high, &high[0]);
  	// 0x7ffeefbff450 0x7ffeefbff450
    
	  return 0;
}
  • Array 의 주소와, Array[0] 의 주소값이 같은것을 확인

 

#include <stdio.h>

#define MONTHS 12   // symbolic constant, mecro

int main(){
    int high[MONTHS] = {2, 5, 11, 18, 23, 27, 29, 30, 26, 20, 12, 24};
  
    for (int i = 0; i < MONTHS; ++i)
        printf("%lld\n", (long long)&high[i]);
  	// 140732920755280
  	// 140732920755284
  	// 140732920755288
  	// 140732920755292
  	// 140732920755296
  	// 140732920755300
  	// 140732920755304
  	// 140732920755308
  	// 140732920755312
  	// 140732920755316
  	// 140732920755320
  	// 140732920755324
 
    return 0;
}
  • Array의 index간 메모리 주소 차이가 4 인것을 확인
    • 4 byte integer 를 저장하는 Array를 선언하였기 때문

 

#include <stdio.h>

#define MONTHS 12   // symbolic constant, mecro

int main(){
    int high[MONTHS] = {2, 5, 11, 18, 23, 27, 29, 30, 26, 20, 12, 24};
    
    high[12] = 4;
    high[-1] = 123;
    
    printf("%d %d\n", high[12], high[-1]);
    return 0;
}
  • Array 의 indexing number 가 범위를 넘어났지만, warning이 발생하고 build가 진행
    • Debug 에서는 메몰 공간을 많이 제공하기 때문에 문제가 발생하지 않지만
    • Release 에서는 오류가 나거나 정상적으로 수행이 되지 않을 수 있음, 주의

 

#include <stdio.h>

#define MONTHS 12   // symbolic constant, mecro

int main(){
    int not_init[4];
    
    for (int i = 0; i < 4; i++)
        printf("%d\n", not_init[i]);
    
    return 0;
}
  • 초기화를 하지 않으면, 기본적으로 쓰레기 값이 들어감
    • xcode 의 경우 0으로 초기화
static int not_init[4];
  • static 으로 선언 해주어도 0으로 초기화, Storage class

 

 

 

#include <stdio.h>

#define MONTHS 12   // symbolic constant, mecro

int main(){
    int insfuu[4] = {2, 4};
    
    for (int i = 0; i < 4; i++)
        printf("%d", not_init[i]);
    // 2 4 0 0
    return 0;
}
  • 일부만 초기화 해주었을때는, compiler 가 나머지 부분 0 으로 초기화

 

 

#include <stdio.h>

int main(){
    const int power_of_twos[] = {1, 2, 4, 8};
    
    printf("%lu\n", sizeof(power_of_twos));
  	// 16
  
    printf("%lu\n", sizeof(int));
  	// 4
    printf("%lu\n", sizeof(power_of_twos[0]));
  	// 4
    
    for (int i = 0; i < sizeof power_of_twos / sizeof power_of_twos[0]; ++i)
        printf("%d ", power_of_twos[i]);
    
    printf("\n");
    return 0;
}
  • A rray 의 크기를 정하지 않고 초기화 하였을때, 사용하는 방법
    • Compiler 가 배열의 크기를 초기화 한 것 처럼 처리
    • 동적 할당에서는 이 방법으로 사용 불가, Array 에서만 사용 가능

 

 

#include <stdio.h>

#define MONTH 12

int main(){
    int days[MONTH] = {31, 28, [4] = 31, 30, 31, [1] = 29};
    for (int i = 0; i < MONTH; ++i)
        printf("%d ", days[i]);
    // 31 29 0 0 31 30 31 0 0 0 0 0 
  
    printf("\n");
    return 0;
}
  • Designated initializers: 초기화 값을 index로 지정
int days[MONTH] = {31, 28, [4] = 31, 30, 31, [1] = 29};
  • days[4] = 31, days[1] = 29

 


이 글의 모든 사진과 내용의 출처는 홍정모 교수님께 있음을 알려드립니다.

http://blog.naver.com/atelierjpro

 

실리콘 밸리의 프로그래머 : 네이버 블로그

안녕하세요! 홍정모 블로그에 오신 것을 환영합니다. 주로 프로그래밍 관련 메모 용도로 사용합니다. 강의 수강하시는 분들은 홍정모 연구소 카페로 오세요.

blog.naver.com

http://www.inflearn.com/course/following-c

 

홍정모의 따라하며 배우는 C언어 - 인프런 | 강의

'따배씨++'의 성원에 힘입어 새롭게 개발된 C 언어로 시작하는 프로그래밍 입문 강의입니다. '따배씨'와 함께 프로그래밍 인생을 업그레이드 해보세요., 따라하며 배우는 C언어 '따배씨++'의 성원

www.inflearn.com

 

Comments