✔️ 배열(array)
가장 많이 사용되는 자료구조 중 하나, 자료형이 동일한 원소 (element)들의 유한 집합
👉배열은 연속적인 메모리 상에서 표현, 각 원소의 값은 고유의 인덱스(index)로 접근
1차원,2차원...다차원 배열까지
👉C언어의 경우는 배열의 인덱스 0부터 시작!
배열은 선언 된 이후 배열의 크기 (원소의 수) 변경할 수 없으므로 원소의 수를 잘 예측해야 공간 부족, 메모리 낭비 예방
✔️ 배열의 선언
원소의 자료형 + 배열 이름 + 배열의 크기 순서로 선언
❗️A의 원소수가 n개라면 배열 인덱스 범위는 [0...n-1]까지 (0부터 시작하니까!)
int A[5]; //정수형 배열
int *ptr[5]; //정수 포인터형 배열
int B[2][3]; //2행 3열 정수형 배열
ex) int juju[5]; 의 배열이라면 👇
메모리 주소 | 배열 원소 |
100000 | juju[0] |
100004 | juju[1] |
100008 | juju[2] |
100012 | juju[3] |
100016 | juju[4] |
정수형 배열 원소 하나에 4바이트를 할당
👉 juju[0] : 배열의 첫 번째 원소의 주소는 시작 주소 : Base Address 라 부른다
ex) int juju[5];
배열의 이름 juju는 시작 주소를 값으로 갖고 있는 포인터 상수 (pointer constant)
=> 선언에 사용된 이름은 이후 다른 값(주소) 가질 수 없다
반면,
int * juju2;
새로운 값을 자유롭게 저장 가능한 포인터 변수
💢헷갈리지 말자
juju == &juju[0] // juju라는 배열 이름은 시작 주소를 갖고 있는 것
*juju == juju[0] // *juju는 juju 시작 주소가 갖고 있는 값을 참조하는 것 => 헷갈리지 말자
#define ARRAY_SIZE 100
int num[ARRAY_SIZE], result;
int arraysum(int num[], int n);
void main(void){
int i;
for(i=0; i<ARRAY_SIZE; i++){
num[i] = i;
}
result = arraySum(num, ARRAY_SIZE);
printf("Sum : %i\n", result);
}
int arraySum(int num[], int n){
int i, temp = 0;
for(i=0; i<n; i++){
temp+=num[i];
}
return temp;
}
//결과 : Sum : 4950
👆위와 같이 함수에 배열을 전달해서 배열 원소의 합계를 전달할 수 있다
✔️ 배열의 선언과 초기화
👉int juju[] = {1,2,3,4,5};
배열의 크기를 따로 지정안해주어도 원소들 초기화하는걸로 배열의 크기 5로 지정해줄 수 있다
#include <stdio.h>
void printArray(int *ptr, int size);
void main(){
int num[10] = {0,1,2,3,4,5,6,7,8,9};
printArray(num,10);
}
void printArray(int *ptr, int size){
int i;
for (i=0; i<size; i++){
printf("%8u %5d\t", ptr+i, *(ptr+i)); //*(ptr+i) 메모리 주소가 참조하고 있는 '값'
printf("%8u %5d\n", &ptr[i], (ptr[i])); //&을 붙이면 '메모리 주소', 없으면 그 배열의 '값'
}
}
//결과
4016175088 0 4016175088 0
4016175092 1 4016175092 1
4016175096 2 4016175096 2
4016175100 3 4016175100 3
4016175104 4 4016175104 4
4016175108 5 4016175108 5
4016175112 6 4016175112 6
4016175116 7 4016175116 7
4016175120 8 4016175120 8
4016175124 9 4016175124 9
주소값이 4바이트씩 추가가 되고 있다
만약 int 가 아닌 배열이 double이었다면 8바이트씩 할당
'자료구조' 카테고리의 다른 글
[자료구조] 08 재귀호출 (0) | 2020.09.21 |
---|---|
[자료구조] 07 구조체,배열 이용한 볼링게임 (0) | 2020.09.21 |
[자료구조] 05 💫 포인터 (0) | 2020.09.17 |
[자료구조] 04 구조체란? (0) | 2020.09.17 |
[자료구조] 03 자료형 (0) | 2020.09.17 |