본문으로 바로가기

[C언어] 배열 (정리3)

category C언어 2018. 2. 6. 17:32

배열이란?


  • 배열이란 ?

▷ 동일한 데이터형 변수의 집합

▷ int a[5]; // int형 변수 5개를 할당한다.

              // (= a[0][5]) : ([0]) 1차원배열의 경우 행은 생략하고 열첨자만 작성하면 된다.


  • 배열의 특징

▷ 메모리 상의 연속적인 공간에 할당된다.

▷ 배열명곧 그 배열의 시작주소상수이다.

▷ 배열 요소는 첨자(Index)로 구분하며 0부터 시작한다.


1차원 배열


int a[5]; // 선언



1차원 배열의 초기화

  • 배열의 전체의 초기화는 선언문에서만 가능
  • 배열을 초기화할 때 중괄호({})를 이용해 초기화 가능
  • 문자열을 char 배열에 저장할 때는 문자열의 길이+1(NULL 문자 저장 공간)만큼으로 설정
  • 배열요소의 개수보다 초기화 데이터가 부족하면 남는 요소는 0으로 채워진다.


  • case1 :  ary1, ary2는 같은 표현
  • case2 : 데이터 부족할 때 모두 0으로 초기화
  • case3 : str, str1, str2는 같은 표현
  • case4 : str3, str4는 같은 표현
  • case5 : 할당된 배열의 남은 공간은 '\0'(널문자)로 채워진다.


  • scanf는 call by pointer
  • (&ary[i]) == (ary + i) == (ary + i * sizeof(int))

차원 조절 연산자

 연산자

선언문 

일반 실행문  

비고 

 *, []

차원 올림 

차원 내림 

중복 사용 가능 

 &

사용불가 

차원 올림 

중복 사용 불가 

 (type)

사용불가 

여러차원 올리고 내리기 

모두 가능 

피연산자의 차원을 고려하지 않고 자신의 형태로 형변환 

-> 

사용불가 

차원 내림 

중복 사용 불가능 


▷ N차원 방의 시작주소는 (N+1)차원이다.



▷ Case 1 : Lv = Rv일 때 차원 type을 모두 일치시켜주어야 한다.

▷ Case 2 : 초기화되지 않은 pp안에 있던 쓰레기값을 주소로 갖는 미예약영역의 값을 num2로 바꾸기 때문 R.T.E 발생
▷ Case 3 : 0번지를 가리키는 데 그곳은 OS가 이미 사용하기 때문에 R.T.E 발생


2차원 배열


int a[4][3]; // 선언


  • 물리적 모양은 한 행에 나열되어 있다.
  • 행우선 배열이다 ( 100 -> 104 -> 108 -> ...)

2차원 배열의 초기화



  • case 1 : ary1와 ary2는 같은 모양이다.
  • case 2 : 배열의 남은 공간을 0으로 채운다.


  • 3 line : 해석 : int배열 3개짜리의 주소
▷ void array_input(int *[3], int, int) : 3개짜리 방이다. 각 방이 (int *) type인

우선순위 [] > * 이므로 ()를 통해 우선순위를 (*) > []로 바꿔줘야 한다.

▷ a + 1 = 112번지 (100번지 + 1 * sizeof(int[3]) = 112 : 2차원 주소)

▷ a[0] + 1 = 112번지 (100번지 + 1 * sizeof(int) = 104 : 1차원 주소)

  • 10 line : 48 / 12 = 4;
  • 11 line : 12 / 4   = 3;


  • case 1 : 실행 O 
  • case 2 : 실행 X 
  • case 3 : 실행 X


배열과 증감연산자


ary[i++]

 ary[i]값을 사용 후 i를 1 증가

ary[++i] 

 i를 1 증가 후 ary[i]값을 사용

++ary[i]

 ary[i]값을 1증가 후 ary[i]값을 사용

ary[i]++

 ary[i]를 사용 후 ary[i]값을 1 증가



'C언어' 카테고리의 다른 글

[C언어] 구조체 (정리5)  (0) 2018.02.09
[C언어] 포인터 (정리4)  (0) 2018.02.07
[C언어] 배열 (정리3)  (0) 2018.02.06
[C언어] 데이터형 (정리2)  (0) 2018.02.06
[C언어] Preview (정리1)  (0) 2018.02.02

댓글을 달아 주세요