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
- Python
- 인프런
- sorting
- Cleancode
- String
- dfs
- C언어
- graph
- 종만북
- 정수론
- C
- JavaScript
- udemy
- Algospot
- BOJ
- php
- 생활코딩
- 백준
- programmers
- server
- BFS
- 따배씨
- 따라하며 배우는 C언어
- Math
- DP
- Algorithm
- greedy
- BASIC
- 따라하면서 배우는 C언어
- web
Archives
- Today
- Total
몽상실현개발주의
[따배씨] 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
http://www.inflearn.com/course/following-c
'Language > C' 카테고리의 다른 글
[따배씨] 10.4 포인터와 배열 (0) | 2021.06.04 |
---|---|
[따배씨] 10.3 포인터의 산술 연산 (0) | 2021.06.04 |
[따배씨] 10.1 배열과 메모리 (0) | 2021.06.04 |
[따배씨] 9.17 포인터 변수의 크기 ~ 9.18 포인터형 매개변수 (0) | 2021.06.03 |
[따배씨] 9.14 포인터와 코딩 스타일 ~ 9.16 디버거로 메모리 들여다 보기 (0) | 2021.06.03 |
Comments