[C] C언어 배열

Posted by 신희준 on July 17, 2018


2018 - 07 - 17 (화)


  • 참고 문헌 : C언어의 정석 [남궁성 지음]

배열

우선 배열이란 같은 타입의 변수 여러개를 하나의 묶음으로 다루는 것이다.

대부분의 내용이 자바나 다른 언어들과 비슷한 맥락이다.

  • 배열의 길이 계산
#include <stdio.h> //<stdio.h>

int main(void)


{

	int i;
	int arr[10];
	const int LEN = sizeof(arr)/sizeof(arr[0]); //배열의 길이 계산

	printf("sizeof(arr)= %d\n" , sizeof(arr));
	printf("sizeof(arr[0)=%d\n", sizeof(arr[0]));
	printf("LEN = %d\n ", LEN);

}

//출력결과
//sizeof(arr)= 40
//sizeof(arr[0)=4
//LEN = 10
  • 배열의 초기화

변수처럼 배열도 선언된 직후에 쓰레기 값이 저장되어 있으므로 적절한 값으로 초기화할 필요가 있다.

int score[@]; //배열을 선언

score[0] = 50;
score[1] = 10;  //배열 초기화

int score[2]= {50, 10}; //배열의 선언과 초기화 동시에 

int score[2] = {0};
int score[2] = {0 , 0}; // 다음 두문장은 동일하다.
int score[] = {0, 0}; // 배열의 길이를 생략할 수도 있다.

위와 같이 배열의 선언 및 초기화는 자바와 동일하다. 특이점은 int score[2] = {0} 과 같이 배열 요소를 한번에 초기화 하는 것은 조금 특이하다.

  • 배열의 복사와 비교

int arr1[5];
int arr2[5];


for(i=0;i<5;i++){
   
    arr2[i] = arr1[i];  // 배열 arr1 의 모든 요소를 arr2 에 복사
}

보통 위와 같은 방법으로 복사를 하게 된다. 또는 memcpy(arr2, arr1, sizeof(arr1)); 방식으로 복사하기도 한다. 이방법은 arr1배열에서 arr2 로 메모리를 통째로 복사하기 때문에 성능이 더 뛰어나다.

  • memcmp는 메모리를 통째로 비교한다
int chk = memcmp(arr2, arr1, sizeof(arr1)); // 두 배열이 같을경우 0 이 저장된다
  • 문자열 저장하기