C언어 > [C] 배열의 개념 파악!!

TODAY856 TOTAL687,450
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | C언어 | C언어 | [C] 배열의 개념 파악!!

페이지 정보

작성자 키트 작성일2017-09-12 11:38 조회368회 댓글0건

본문

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

- 배열은 가장 기본적인 자료 구조이다.

- 배열을 알게 되면 예전에 할 수 없었던 많은 것을 할 수 있게 된다.

- 배열은 동일한 타입을 가지는 변수들의 유한 집합이다.

- 일반 변수 선언문과 동일하되 변수명 뒤에 [ ] 괄호(bracket)와 배열 크기 지정문이 온다는 것만 다르다.

- 배열 선언문에 [ ] 괄호가 하나 있으면 1차원 배열이고 두 개 있으면 2차원 배열이라고 한다.
   (3개면 당연히 3차원)


- 배열을 구성하는 각각의 개별 변수들을 배열 요소(Element)라고 한다.

int ar[5] 선언에 의해 ar[0]부터 ar[4]까지 정수형 배열 요소 다섯 개가 동시에 생성된다.

배열 요소는 동일한 타입을 가지는 변수와 완전히 같은 자격을 가진다.

- 배열은 낭비되는 메모리가 없다.

- 배열 요소들이 연속적인 공간에 배치되어 있기 때문에 요소를 참조하는 속도가 대단히 빠르다.


예) type 배열명[크기][크기];


int ar[5];                // 크기가 5인 정수형 배열 ar     크기는 반드시 상수이어랴 한다

double avg[10];      // 크기가 10인 실수형 배열 avg  크기는 반드시 상수이어랴 한다

char st[128];          // 크기가 128인 문자형 배열 st   크기는 반드시 상수이어랴 한다


type :

- 정수형 변수들의 모임이면 int, 실수형 변수들의 모임이면 double 이런식으로 적는다.

- 기본형 외에도 포인터, 구조체, 사용자 정의형 등 임의의 타입이 모두 배열을 구성할 수 있다.


배열명 : 

- 배열의 이름이다.

- 배열명도 명칭이므로 명칭 규칙에 맞게만 작성하면 된다.

- 배열명에는 ar이나 a같은 접두어를 붙여 이 변수가 배열이라는 것을 쉽게 알 수 있도록 한다.

- 배열의 이름은 첫번째요소의 주소값을 나타낸다. 


크기 :

- 이 배열이 몇 개의 요소를 가지는지, 즉 몇 개의 변수가 모여서 배열을 구성하는지를 지정한다.

- 음수나 실수는 당연히 안되며 선언할 때 필요한 메모리양을 계산할 수 있어야 하므로 상수만 쓸수 있다.



+++++ 배열의 특징 +++++


- 배열 요소의 번호인 첨자는 항상 0부터 시작(Zero Base)한다.
   (컴퓨터는 0이 언제나 첫 번째 숫자이다.)

- 첫 번째 요소의 첨자가 1번이 아니라 0번이기 때문에 마지막 요소의 첨자는 배열의 크기보다 항상 
   하나 더 작다.

- 배열이 차지하는 총 메모리양은 배열의 크기에 배열 요소의 크기를 곱해서 구할 수 있다.
   int[5]면 4byte *  5 =20byte

- 배열의 총 바이트 수는 sizeof 연산자로 쉽게 구할 수 있으므로 이 연산자가 구해주는 크기를 
   사용하면 된다.


- 배열요소의 개수를 알고 싶다면 다음 공식을 사용한다.

 

 

 

  [공식] 배열 크기=sizeof(배열)/sizeof(배열[0]);

 :배열의 총 바이트 수를 배열 요소의 크기로 나누면 요소의 개수가 된다.

 

 

 +++++ 배열의 초기화 +++++


- 초기식에 { } 괄호와 각 초기값들 사이에 콤마를 사용한다는 점이다.

 

 

 

예) type 배열명[크기]={초기화 값들};

   int a[5]={0,0,0,0,0};

   int a[5]={0,};   <------- 배열의 첨자가 클경우 초기화 방법.

   int a[]={0,0,0,0,0} <---- 초기값 수만큼 배열첨자가 자동생성.


- 배열은 여러 개의 값을 나열해야 하므로 { } 괄호를 생략할 수 없다.

- 배열의 중간 부분은 모두 0으로 하고 뒷부분의 일부만 원하는 값으로 초기화하는 방법은 제공되지 
   않는다.

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><v:shapetype id="_x0000_t75" path=" m@4@5 l@4@11@9@11@9@5 xe" stroked="f" filled="f" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0 "></v:f><v:f eqn="sum @0 1 0 "></v:f><v:f eqn="sum 0 0 @1 "></v:f><v:f eqn="prod @2 1 2 "></v:f><v:f eqn="prod @3 21600 pixelWidth "></v:f><v:f eqn="prod @3 21600 pixelHeight "></v:f><v:f eqn="sum @0 0 1 "></v:f><v:f eqn="prod @6 1 2 "></v:f><v:f eqn="prod @7 21600 pixelWidth "></v:f><v:f eqn="sum @8 21600 0 "></v:f><v:f eqn="prod @7 21600 pixelHeight "></v:f><v:f eqn="sum @10 21600 0 "></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype>

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

- 굳이 중간 부분만을 초기화 하고자 할때는

   int a[1000]={0,};

   a[912]=3;   <------ 이런식으로 값을 직접 넣어줘야 한다.

 

 

 

 

 

 

 

- 초기값이 배열의 첨자값보다 많을 경우 컴파일하면 too many initializer(초기값이 너무 많다)라는 
   에러로 처리된다.

 

 

 

 

배열 크기와 초기값이

 

 

결과

 

 

 맞으면

만사 형통

초기값이 모자라면

나머지는 모두 0

초기값이 남으면

에러로 처리됨

배열 크기를 생략하면

개수만큼 자동으로 크기 설정

 


 

 

 

+++++ 문자형 배열 ++++++

 

문자형 배열 char st[]="korea";

st는 문자를 전달하는 것이 아니라 문자가 시작하는 첫 메모리 주소를 말하는 것이다.(st자체가 포인터)


- 배열의 앞부분 주소를 알려줄테니 뒷부분은 알아서 하라는 식이다.


프로그래머는 주소의 앞부분만 알면 이어지는 메모리 영역의 배열 값을 차례대로 골라낼수 있게 된다.


문자 배열의 마직막에는 항상 NULL(0) 값이 포함되어있다.

- 코드가 0이 될때까지 무엇을 처리한다.

- 코드가 0이 될때까지 한문자를 반복 출력한다.->문자열 출력

- 코드가 0이 될때까지 출력 -> 문자열 길이조사


문자배열 초기화 방법

char s[]={65,66,67,68,69,0};  <----------- 직접 수치로 쓴다.

char s[]={'a','b','c','d','\0'}; <--------- 문자 정수로 쓴다.


문자열 전용 초기화 방법

char s[]="ABCDE";

char s[6]="ABCDE";


---- 문자열 표현방식의 이해

 

1. char str1[5]="abcde"; // 문자열 변수

2. char *str2="abcde" ;   // 문자열 상수


1과 2의 차이점은 1은 문자열 변수이다 각5개의 배열에 abcde가 위치하게되며 2 번의 경우는 *str2를 이용하여 문자열

상수abcde를 가리킨다는 의미이다.

- 문자열 상수는 메모리 공간에 저장이 되면, 그순간에 문자열 상수의 주소값이 반환된다.

 

http://inhale.tistory.com/12

댓글 0

조회수 368

등록된 댓글이 없습니다.

C언어HOME > C언어 > 전체 목록

게시물 검색

2019년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2018년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
Privacy Policy
MCU BASIC ⓒ 2017
모바일버전으로보기