[0]

ucf·2020년 9월 29일
0

알고리즘&자료구조

목록 보기
1/13

1. 배열

배열의 요솟값 초기화

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

배열의 요소 구하기

int as = sizeof(a)/sizeof(a[0])

배열의 요소 개수를 변수로 사용하면 안됨

int n=5;
int a[n];

잘못된 예.

2. 메모리 할당

c언어 메모리구조

  1. 프로그램이 실행될 때마다 할당
  2. 메인메모리(RAM)에 할당
  3. 프로그램 실행에 필요한 메모리 영역(지역변수, 전역변수)선언을 위해 할당
  4. 데이터영역, 스택영역, 힙 영역으로 이루어짐

데이터 영역: 전역변수와 정적변수가 할당되는 영역. 프로그램이 시작되면 할당하고, 종료하면 메모리에서 해제함.
스택 영역: 함수 호출 시 생성되는 지역 변수와 매개변수가 저장되는 영역. 함수 호출이 완료되면 사라짐.
힙 영역: 필요에 따라 동적으로 메모리를 할당.

출처:https://bskyvision.com/160

메모리 할당에는 malloc 함수와 calloc 함수를 통해 힙 영역에서 이루어짐.

malloc(size) : 크기가 size인 메모리를 할당함. 할당된 메모리값은 정의되지 않음.
calloc(num,size) : 크기가 size인 메모리를 num개 들어갈만큼 할당. 할당한 메모리의 비트는 모두 0으로 초기화.
free(variable): 생성된 메모리를 해제함. 프로그램 실행 도중에도 원하는 시점에 변수를 제거가능.

  • 두 함수 모두 실패하면 NULL을 반환, 성공시 첫번째 포인터를 반환한다.
  • stdlib 라이브러리를 사용한다.

malloc을 사용한 예제

#include<stdio.h>
#include<stdlib.h>
int main(){
	int *x;
    x = malloc(sizeof(int));
    if(x==NULL){
    	puts("메모리 할당 에러");
    }
   	else{
    	*x = 10;
        printf("*x=%d",*x);
        free(x);
    }
}

calloc을 사용한 예제

#include<stdio.h>
#include<stdlib.h>
int main(){
	int *x;
    int s=6;
    x = calloc(s, sizeof(int));
    if(x==NULL){
    	puts("메모리 할당 에러");
    }
   	else{
    	printf("%d개의 정수 입력",s);
        for(int i=0; i<s; i++){
        	scanf("%d",x[i]);
        }
    printf("각 요솟값은 다음과 같음");
    for(int i=0; i<s; i++){
    	printf("x[%d]=%d",i,a[i]);
    }
    free(x);
    }
}

위와 같이 calloc에서 생성한 메모리는 배열처럼 사용할 수 있음.
x는 메모리의 첫번째 주소를 가르킴. 때문에 x[0], x[1] 등을 통해 메모리의 요소에 접근가능.

profile
즐기자!

0개의 댓글