미새문지

크래프톤 정글 week04, day25 - c언어 포인터, 배열 본문

크래프톤 정글/TIL

크래프톤 정글 week04, day25 - c언어 포인터, 배열

문미새 2024. 2. 20. 12:46
728x90
  • c언어에서는 두 종류의 소스 코드 파일이 있다
    • c파일(.c)
      • 실제 프로그램을 돌게 하는 로직 코드 파일
      • 내용 : 함수, 매크로, 변수 등
    • 헤더 파일(.h)
      • 여러 소스 코드 파일에 공통적으로 필요한 것들을 저장하는 파일
      • 내용 : 함수 선언, 매크로, extern 변수 선언 등
      • #include로 헤더 파일을 작성
  • 헤더 파일의 필요성
    • 함수가 선언된 헤더 파일을 작성하면 여러 파일과 공유가 가능하다.
    • 수정할 때 관련 파일이 많으면 모두 고치기 불편하기 때문에 유지 보수에 어려움이 생긴다.

포인터

  • 데이터가 저장된 메모리의 주소 값을 저장하는 변수이며, 포인터 변수라고도 부른다.
  • 메모리의 주소가 어디인지를 저장하는 전용 변수
  • 특징
    • 포인터를 통해 프로그램의 변수에 접근하여 읽고 쓰거나, 함수를 실행할 수 있다.
    • 자료형을 선언할 때 해당 변수 명의 앞에 별표(*)를 붙이면 앞 자료형을 가리키는 포인터 변수가 된다.
    • 이렇게 선언된 포인터 변수에서 주소를 얻고 싶은 변수의 앞에 앰퍼샌드(&)를 붙여주면 그 변수의 주소값이 저장된다.
  • 예시
    • 기호는 변수를 선언할 때와 변수를 사용할 때에 따라 다르게 작동한다.
      • 변수를 선언할 때 *를 사용하면, 그 변수는 포인터 변수임을 나타낸다.
      • 예를 들어, int *b는 정수를 가리키는 포인터 b를 선언한다. 그리고 b = &a를 할당하면 b는 a의 메모리 주소를 가리키게 된다.
int a = 7;
int *b = &a;
printf("%d", *b); // 7이 출력

배열

  • 정적 배열
    • 선언하면서 배열의 크기를 할당시키며, 프로그램이 실행되는 동안 크기가 변하지 않는 배열이다.
    • 정적 배열은 메모리의 스택 영역에 할당된다.
    • 동적 배열은 힙에 메모리가 할당되어 배열의 사용이 끝나면 free로 반드시 배열을 지워줘야 하는데 정적 배열은 스택에 메모리가 할당되어 알아서 사라진다.
    • 생성 코드
int arr[10] = {0} // 0을 할당하지 않으면 빈 배열에 쓰레기 값이 들어가게 되어
 경고가 뜨기 때문에할당해야 한다.

 

 

  • 장점
    • 코드가 간결해 사용이 간단하고 고정된 메모리 값을 가진 배열이라 접근 속도가 빠르다.
    • 단점
      • 프로그램이 실행되는 동안 배열의 크기를 변경할 수 없기 때문에 크기를 미리 알고 선언해야 하며, 배열이 너무 크면 메모리가 낭비될 수 있다.
  • 동적 배열
    • 프로그램 실행 중에 배열의 크기를 변경할 수 있는 배열이다.
    • 동적 배열은 메모리의 힙 영역에 할당된다.
    • malloc, calloc, realloc 등의 함수를 사용해 메모리를 할당하고 free를 사용해 메모리를 해제한다.
    • 생성 코드
int* arr = (int*)malloc(sizeof(int)*10); // malloc을 이용해 배열의 타입 크기*i 만큼 
메모리를 할당하게 된다.
free(arr); // 그리고 사용이 끝나면 반드시 배열을 제거
    • 장점
      • 프로그램 실행 중에 배열의 크기를 변경할 수 있어 데이터의 크기가 변동되야 하거나 크기를 미리 알 수 없을 때 유용하다.
      • 사용자로부터 입력을 받아 저장하는 경우엔 미리 배열의 크기를 할당할 수 없기 때문에 이럴 때 사용할 수 있다.
    • 단점
      • 메모리 관리를 직접 해야 하고 메모리는 사용 후에 반드시 삭제해야 한다. 그렇지 않으면 메모리 누수가 발생할 수 있다.
      • 메모리를 할당하거나 해제하는 작업은 비용이 많이 들기 때문에 동적 배열을 많이 사용하면 프로그램의 성능이 저하될 수 있다.

학습 시간 : 10 ~ 26시

728x90