배열의 요솟값 초기화
int a[5] = {1,2,3,4,5}
배열의 요소 구하기
int as = sizeof(a)/sizeof(a[0])
배열의 요소 개수를 변수로 사용하면 안됨
int n=5;
int a[n];
잘못된 예.
c언어 메모리구조
- 프로그램이 실행될 때마다 할당
- 메인메모리(RAM)에 할당
- 프로그램 실행에 필요한 메모리 영역(지역변수, 전역변수)선언을 위해 할당
- 데이터영역, 스택영역, 힙 영역으로 이루어짐
데이터 영역: 전역변수와 정적변수가 할당되는 영역. 프로그램이 시작되면 할당하고, 종료하면 메모리에서 해제함.
스택 영역: 함수 호출 시 생성되는 지역 변수와 매개변수가 저장되는 영역. 함수 호출이 완료되면 사라짐.
힙 영역: 필요에 따라 동적으로 메모리를 할당.
메모리 할당에는 malloc 함수와 calloc 함수를 통해 힙 영역에서 이루어짐.
malloc(size) : 크기가 size인 메모리를 할당함. 할당된 메모리값은 정의되지 않음.
calloc(num,size) : 크기가 size인 메모리를 num개 들어갈만큼 할당. 할당한 메모리의 비트는 모두 0으로 초기화.
free(variable): 생성된 메모리를 해제함. 프로그램 실행 도중에도 원하는 시점에 변수를 제거가능.
#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);
}
}
#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] 등을 통해 메모리의 요소에 접근가능.