본문 바로가기
C 언어

c 언어[019] 배열 Array , 인덱스, 배열 주소값 , 배열크기, sizeof(arr)

by Smart Factory in 2020 2021. 9. 21.
728x90
반응형

안녕하세요. 스마트 팩토리입니다. 
c 언어[019] 배열 Array , 인덱스, 배열 주소값 , 배열크기, sizeof(arr)에 대해 알아보겠습니다. 

 

1. 배열(Array)

가. 배열

- 동일한 특성을 가지며 일정한 규칙에 따라 요소가 나열되어 있는 데이터 집합
- 1차원, 2차원 등으로 차원을 가진다. 
- 변수보다 큰 범위로 일정한 규칙에 따라 동일한 데이터 형으로 인덱스를 가지고 있는 집합

나. 배열의 형식

 c 언어 배열의 형식 
int 배열변수명[ 숫자];
float 배열변수명[숫자];
int 배열변수명[];

ex) int arr[3];

 

배열 변수 arr[3]을 선언하고 초기화 했습니다. 
일반변수와 큰 차이가 없을 수 있지만 동일한 데이터 형식의 값을 여러가지 저장할 때는 필수적입니다. 

int arr[3] = {90,80,70}; 

정수형 배열 arr[3]을 생성하였습니다.

arr[3]은 순차적으로

arr[0]=90;
arr[1]=80;
arr[2]=70;
으로 할당이 됩니다. 

printf("arr 값: %d \n",arr); 

여기서 주목할 것은 arr 값을 출력하면 해당 주소값이 나옵니다. 

그리고 배열의 첫번째 인덱스 arr[0] 입니다. 

arr의 출력값(3341328)과 , &arr[0]의 주소값(3341328)은 같습니다. 

 

그리고 각 배열의 인덱스별 주소값을 보면 

arr[0]=3341328
arr[1]=3341332
arr[2]=3341336

끝자리가 4바이트 차이가 나는 것을 알 수 있습니다. 이는 배열의 자료형에 따른 크기로 인덱스별  동일한 크기로 저장되고 바로 이웃해서 저장되는것을 알 수 있습니다. 

 

#include<stdio.h>
void main(){
int arr[3] = {90,80,70};

printf("arr 값: %d \n",arr);
printf("arr[0] 주소값 : %d이고 저장된 값은 %d 입니다.\n", &arr[0],arr[0]);
printf("arr[1] 주소값 : %d이고 저장된 값은 %d 입니다.\n", &arr[1], arr[1]);
printf("arr[2] 주소값 : %d이고 저장된 값은 %d 입니다.\n", &arr[2], arr[2]);
 
}

다. 배열의 합 구하기 

배열의 합은 일반 변수의 합과 동일하지만 반복문을 활용하면 신속하게 구할 수 있고 코드도 짧아집니다. 

 

sizeof(arr)은 배열 arr의 전체 크기를 의미합니다. 즉 배열 각 인덱스 하나하나 값을 모두 더한 값으로 주어진 경우 12바이트가 됩니다. 그래서 배열의 크기( 인덱스 수)를 알기 위해서 

sizeof(arr)/ sizeof(int) 으로 하면 인덱스 수가 나옵니다. 즉 3이 나옵니다. 

이는 배열의 총 수를 모를때 위와 같은 방법을 사용하면 편리합니다. 

평균은 소수점 자리가 나오므로 실수형 float 형으로 표현 형식은 1.2f 로 하여 소수점 둘째자리까지 나타내도록 하였습니다. 

#include<stdio.h>
void main(){
int arr[3] = {90,80,70};
int sum = 0;
float avg;

 for (int i = 0; i < sizeof(arr)/sizeof(int); i++)
 {
    sum += arr[i];
 }

avg = sum / (sizeof(arr)/sizeof(int)); 
 
printf(" 총점은 %d이고 평균은 %1.2f입니다. \n", sum, avg);
}

결과값까지 원하는 대로 나온 것을 알 수 있습니다.

 

728x90
반응형

댓글