1. 배열의 선언과 사용

- 동일한 자료형을 저장할 저장공간이 많이 필요한 경우 일일이 변수를 선언하는것을 비효율적이다. 이때 배열을 사용하여 대체할수 있다.

배열을 사용하기 위해서는 선언을 먼저 해야한다. 배열의 선언은 간단하다. 요소의 자료형에 이름을 붙이고 필요한 요소 수를 표시한다.


int ary[5];


int = 요소 형태

ary = 배열명

[5] = 요소 개수


 

#include<stdio.h>


int main(void)

{

int ary[5];


ary[0] = 10;

ary[1] = 20;

ary[2] = ary[0] + ary[1];

scanf("%d", &ary[3]);


printf("%d\n", ary[2]);

printf("%d\n", ary[3]);

printf("%d\n", ary[4]);


return 0;

}


INT형 변수 5개를 하나씩 선언하는 것과 전체 저장 공간의 크기는 같다. 그러나 메모리할당되는 방식에는 차이가 있다. 변수를 선언하면 각 변수는 독립적인 저장공간을 갖고 각각의 이름으로 사용되는데

int a, b, c, d, e;
a(4byte), b(4byte), c(4byte), d(4byte), e(4byte)


반면에 배열은 저장공간이 연속으로 할당되어 배열명이 전체 공간의 이름이 된다.

int ary[5]; // 메모리 공간이 연속적으로 할당되며 이름은 하나다.

ary(20byte)


int형 변수의 크기가 4바이트이므로 5개를 연속으로 할당하면 총 20바이트를 할당된다. 배열의 나누어진 조각을 배열 요소라 하는데, 각각의 배열 요소는 int형 변수와 똑같이 쓰인다. 배열 요소는 배열명에 첨자(index)를 붙여 표현하며 첨자는 0부터 시작한다.


ary[0], ary[1], ary[2], ary[3], ary[4]



배열을 선언할 때와 배열 요소를 사용할때 대괄호 안의 숫자는 의미가 다른다. 선언할 때는 배열 요소의 전체 개수를 표시하며, 사용할 때는 각 요소가 ㅁ배열에서 몇 번째에 있는지 의미한다. 이값이 첨자며 첨자를 사용할 때는 다음 내용을 반드시 지켜야한다.


배열의 첨자는 0부터 시작하므로 최대 '배열 요소 수 -1'까지 사용가능하다. 

-> 배열의 ary 크기가 5일때 ary[5]를 사용하면? compile error

배열의 요소를 사용할때 첨자의 사용 범위를 벗어나면 그 결과를 예측할 수 없다. 배열에 할당된 영역을 벗어난 메모리를 사용하므로 침범함 영역이 어떤 용도에 사용되느냐에 따라 결과가 달라진다. 







2. 배열의 초기화

- 변수와 마찬가지로 배열도 최초 할당된 저장공간에는 쓰레기값이 있다. 배열이 선언과 동시에 원하는 값을 갖도록 하려면 초기화를 해야 한다.


배열은 중괄호로 묶어서 초기화한다.


단, 반드시 선언과 동시에 초기화해야하며, 선언하고 난 후에 값을 저장하려면 배열 요소에 하나씩 값을 대입해야한다.


int main(void)

{

int ary1[5] = { 1,2,3,4,5 };

int ary2[5] = { 1,2,3 };

int ary3[] = { 1,2,3 };

double ary4[5] = { 1.0, 2.0, 3.0, 4.0, 5.4 };

char ary5[5] = { 'a','b','c','d','e' };


ary1[0] = 10;

ary1[1] = 20;

ary1[2] = 30;

ary1[3] = 40;

ary1[4] = 50;


return 0;

}


초깃값은 첫 번째 요소부터 차례로 초기화된다. ary2의 경우 초깃값이 배열 요소 수보다 적은 경우인데 이대는 다음의 규칙을 따른다

왼쪽에서 차례로 초기화되고 남는 배열의 요소는 모두 0으로 채운다.

이런 자동초기화 기능을 사용하면 배욜 요소 수가 많아도 모든 요소를 쉽게 0으로 초기화 가능하다.







우선순위

종류 

연산자 

연산 방향 

 1

 1차 연산자

( ) [ ] . -> 

-> 

 2

 단항 연산자

 - + + - - ~ ! * & sizeof (type) 

<-

 3, 4

 산술 연산자

 * / % + -

 -> 

 5

 비트 이동 연산자

 << >>

 -> 

 6

 관계 연산자

 < <= > >=

 -> 

 7

 동등 연산자

== != 

 -> 

 8, 9, 10

 비트 논리 연산자 

& ^ | 

 -> 

 11, 12

 논리 연산자 

&& || 

 -> 

 13

 조건 연산자 

? : 

  -> 

 14

 대입 연산자 

= += -= *= /= %= &= ^= |= <<= >>= 

 <-

 15

 콤마 연산자 

 -> 

(연산자의 종류)



1. 연산자와 피연산자


- 프로그램은 CPU가 처리하는 명령들의 묶음이다. 일반적으로 연산자는 컴파일되면 명령어로 바뀌므로 연산자를 배우는 것은 결국 명령을 익히는것이다. 이든 연산 명령에는 연산의 대상이 되는 데이터가 필요한데 이를 피연산자라고 한다.


++a    10%3    (a>10)&&(a<20)


연산자는 보통 기능에 따라 분류되지만 피연사자의 개수에 따라 나눌수도 있다.

피연산자가 하나면 단항연산자, 2개면 이항연산자, 3개명 삼항연산자





2. 산술 연산자와 대입 연산자


- 산술 연산자는 +, -, *, /, %가 있는데 모두 2개의 피연산자를 사용한다. 이중 -연산자는 피연산자를 하나만 사용하여 그 부호를 바꾸는 연산자로도 쓰인다.


a = 10;    sum= a+b;


대입연산자 오른쪽의 변수는 값의 변화가 없고 왼쪽의 변수는 값이 바뀐다.


일반적으로 a와b같은 변수는 데이터를 저장하는 메모리(ram)에 존재하는 반면 연산은 CPU에서 이뤄진다. 연산할 때는 메모리에 있는 변수의 값을 CPU로 복사하여 사용하므로 아무리 많은 ㅇ녀산을 수행해도 피연산자 a, b값은 변하지 않는다. 반면 대입 연산을 수행한 sum, sub, mul, dnv의 값은 변하게 된다.





3. 나눗셈 연산자와 나머지 연산자


- 나눗셈에는 / 연산자를 사용한다. 나눗셈 연산자를 사용할 때는 피연산자의 형태에 따라 결과가 달라지니 주의해야한다.


나눗셈 연산자는 정수로 연산할 때 몫을 구하고 실수로 연산할 때는 소수점까지 구한다.


나눗셈 연산자의 이런 특징은 수학적 나눗셈을 기대한 경우 활당한 결과가 되겠지만 몫을 구할 때에는 유용하게 쓰인다. 반면에 몫은 뺀 나머지만을 구할 때는 나머지 연산자인 %기호를 사용한다. 실수 연산에는 나머지 개념이 없으므로 나머지 연산자의 피연산자로는 반드시 정수만을 사용한다.





4. 증감 연산자


증감 연산자는 단항 연산자를 피연산자의 값을 1증가시키거나 1감소시킨다.

증가시킬 때는 '++' 연산자를, 감소시킬 때는 '--' 연산자를 사용한다. 증감 연산자는 하나의 연산자로 대인 연산까지 수행하므로 변수의 값을 1씩 증가시키거나 감소시킬때 쉽게 표현할수 있다.


++a --a


증감 연산자는 특이하게도 ++a 뿐만 아니라 a++ 형태와 같이 사용할수있따. 피연산자의 앞에 놓이면 전위형, 뒤에 놓이면 후위형이라고 한다.


증감 연산식이 단독으로 사용된 경우엔 전위형과 후위형의 결과는 같다. 그러나 다른 연산자와 함께 쓰이면 다른 연산의 결과에 영향을 미친다. 

증감 연산자의 후위형은 다른 연산자와 함께 사용될 때 가장 나중에 연산된다.





5. 관계 연산자


관계 연산자에는 대소 관계 연산자와 동등 관계 연산자가 있다.


대소 관계는 < 또는 > 등의 기호를 사용하고, 동등 관계는 ==나 != 기호를 사용한다. 이들 연산자는 모두 피연산자를 2개 사용하며, 연산의 결과값은 1또는 0이 된다. 컴파일러는 0은거짓으로 -이 아닌 값은 참으로 판단하기에 관계식을 실행 조건 검사에 사용할수있다. 



관계 연산의 결과는 주로 판단의 근거로 사용된다.


예를 들어 a와 b값이 무엇인지 모르지만 둘 중에 큰값을 택한다면 a>b 연산을 수행항 ㅕ결곽밧을 확인하면 된다. 결과가 1이면 a가 b보다 크므로 a를 택하고 결과가 0이면 b가 크거나 최소한 같으므로 b를 택하면 된다. 





6. 논리 연산자


논리 연산자는 &&, ||, ! 세개이다.


&& 연산자는 2개의 피연산자가 모두 참일 때만 연산결과가 참이 되고 || 연산자는 둘 중에 하나라도 참이면 참이 된다. ! 연산자는 피연산자를 하나 사용하여 그 참과 거짓을 바꿀때 사용한다. 

'C' 카테고리의 다른 글

[C언어] 열거형 enum  (0) 2018.08.24
[C언어] 구조체와 공용체 (struct, union)  (0) 2018.08.24
c언어 배열  (0) 2018.07.22
C언어 포인터의 크기와 데이터 타입  (1) 2018.07.14
C언어 포인터 기초 개념  (0) 2018.07.14

+ Recent posts