ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자료구조 제1강
    자료구조 2022. 1. 9. 18:15

    배열, 포인터, 문자열, 동적메모리할당

     

     

    포인터: 메모리 주소를 값으로 가지는 변수

    선언 방법 -> type-name * variable-name;

    ex) int * ptr;

     

    연산자 &: 변수로부터 그 변수의 주소를 추출하는 연산자

     

     

    포인터와 배열

    int a[10];      // 10개의 정수를 수용할 수 있는 메모리 (40바이트)가 할당됨

     * 배열의 이름은 배열의 시작 주소를 저장하는 포인터 변수임

    #include <stdio.h>
    int main() {
    	int sum, i, average;
    	int num[10];
    	for (i = 0; i < 10; i++)
    		scanf("%d", &num[i]);
    	sum = calculate_sum(num);
    	average = sum / 10;
    	printf("%d\n", average);
    	return 0;
    }
    
    int calculate_sum(int* array)		// 배열을 매개변수로 받을 때, int array[] 대신 이렇게 포인터로 받을 수도 있음
    {
    	int sum, i;
    	sum = 0;
    	for (i = 0; i < 10; i++)
    		sum = sum + array[i];
    	return sum;
    }

     

    • *a와 a[0]은 동일한 의미이다.
    • 또한 a[1]은 *(a+1)과 동일하고, a[i]는 *(a+i)와 동일하다.

     

    동적메모리 할당

    • 변수를 선언하는 대신 프로그램의 요청으로 메모리를 할당할 수 있다. 이것을 동적 메모리 할당이라고 부른다.
    • malloc 함수를 호출하여 동적메모리할당을 요청하면 요구하는 크기의 메모리를 할당하고 그 시작 주소를 변환한다.
    #include <stdio.h>
    #include <stdlib.h>
    
    int main() {
    	int* p;
    	// malloc이 반환하는 주소는 타입이 없는 주소(void*)이다. 정수들을 저장하기 위해서
    	// 이것을 int* 로 변환한다. (반드시 필요한 것은 아님)
    	p = (int*)malloc(4*sizeof(int));
    	if (p == NULL) {
    		//동적 메모리 할당 실패
    		//적절한 조치를 취한다.
    	}
    	// malloc으로 할당받은 메모리는 이렇게 보통의 배열처럼 사용한다.
    	p[0] = 12;
    	p[1] = 24;
    	*(p + 2) = 36;
    }

     

    배열 키우기

    #include <stdio.h>
    #include <stdlib.h>
    
    int main() {
    	int* array = (int*)malloc(4 * sizeof(int));		//16byte
    	array[0] = 1;
    	array[1] = 2;
    	*(array + 2) = 3;
        
        /* 배열 array의 크기가 부족한 상황이 발생한다. */
    
    	int* tmp = (int*)malloc(8 * sizeof(int));
    	int i;
    	for (i = 0; i < 4; i++)
    		tmp[i] = array[i];
    
    	array = tmp;		//동적할당을 했을 때만 array값 수정 가능함
       
    	array[4] = 4;
    	array[5] = 5;
    
    	printf("%d", array[5]);
    
    	return 0;
    }

     

    * 위의 코드가 좋은 코드는 아님 (처음 할당한 16byte 크기의 공간은 쓰지 않는 공간으로 계속 가지고 있기 때문)

     

     

    '자료구조' 카테고리의 다른 글

    *자료구조 제 6강  (0) 2022.02.15
    자료구조 제 5강  (0) 2022.02.15
    자료구조 제 4강  (0) 2022.01.24
    자료구조 제 3강  (0) 2022.01.09
    자료구조 제2강  (0) 2022.01.09
Designed by Tistory.