2장 기본 자료구조
02-1 배열
자료구조
데이터 단위와 데이터 자체 사이의 물리적 또는 논리적인 관계
배열
같은 자료형의 변수로 이루어진 요소가 모여 직선 모양으로 줄지어 있는 자료구조
// 자료형이 int이며 요소 개수가 5개인 배열
#define N 5
int main(void)
{
int i;
int a[N];
for (i = 0; i < N; i++)
{
printf("a[%d] : ", i);
scanf_s("%d", &a[i]);
}
puts("각 요소의 값");
for (i = 0; i < N; i++)
{
printf("a[%d] = %d\n", i, a[i]);
}
return 0;
}
자료형 배열이름[요소 개수];
요소와 인덱스
배열의 개별 요소에 접근하기 위해 인덱스를 사용
첫번째 배열 요소의 인덱스는 0으로 정해져 있음
메모리 할당 기간과 동적 객체 생성
calloc, malloc 함수는 힙(Heap)이라는 빈 공간에 기억 장소를 확보
free 함수는 확보한 메모리가 불필요 시 공간을 해제
C언어의 메모리 구조
데이터(Data) 영역
전역 변수와 정적 변수가 할당되는 영역
프로그램을 시작하면 할당하고, 프로그램을 종료하면 메모리에서 해제함
스택(Stack) 영역
함수 호출 시 생성되는 지역변수와 매개변수가 저장되는 영역
함수 호출이 완료되면 사라짐
힙(Heap) 영역
필요에 따라 동적으로 메모리를 할당
포인터란?
객체(변수) 또는 함수를 가리키는 것
void 포인터
모든 형의 객체를 가리킬 수 있음
void 포인터의 값을 모든 자료형의 포인터에 대입할 수 있고, 모든 자료형의 포인터 값을 void 포이터에 대입할 수 있음
전위형 증가 연산자 ++a
식 전체를 펑가하기 전 a의 값을 증가
후위형 증가 연산자 a++
식 전체를 평가한 후 a의 값을 증가
다차원 배열
int형 : 'int'를 자료형
int[3]형 : 'int'를 자료형으로 하는 단일 요소가 3개인 배열
int[3][4]형 : 'int'를 자료형으로 하는 단일 요소가 3개인 배열을 자료형으로 하는 요소 개수가 4개인 배열
// 한 해의 지난 날 수를 계산하는 프로그램
//각 달의 날 수
int mdays[][12]
= { {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} };
//윤년인가?
int isleap(int year)
{
return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
}
//년 월 일의 그 해 지난 날 수를 구하기
int dayofyear(int y, int m, int d)
{
int i;
int days = d;
for (i = 1; i < m; i++)
{
days += mdays[isleap(y)][i - 1];
}
return days;
}
int main(void)
{
int year, month, day;
int retry;
do
{
printf("년 : ");
scanf_s("%d", &year);
printf("월 : ");
scanf_s("%d", &month);
printf("일 : ");
scanf_s("%d", &day);
printf("%d년의 %d일째 입니다.\n", year, dayofyear(year, month, day));
printf("다시 할까요? (1....예/0....아니오) : ");
scanf_s("%d", &retry);
} while (retry == 1);
return 0;
}
02-2 구조체
구조체란?
임의의 자료형의 요소를 조합하여 다시 만든 자료구조
// 구조체 xyz
struct xyz {
int x;
long y;
double z;
};
// 구조체 xyz형 a의 정의
struct xyz a;
// a를 가리키는 포인터
struct xyz *p = &a;
// 구조체 xyz와 동의어인 XYZ를 선언
typedef struct xyz XYZ;
-> struct xyz a; == XYZ a;
-> struct xyz *p = &a; == XYZ *p = &a;
#자료구조와 함께 배우는 알고리즘 입문 C언어편 - 6 (0) | 2022.05.19 |
---|---|
#자료구조와 함께 배우는 알고리즘 입문 C언어편 - 5 (0) | 2022.05.16 |
#자료구조와 함께 배우는 알고리즘 입문 C언어편 - 4 (0) | 2022.05.12 |
#자료구조와 함께 배우는 알고리즘 입문 C언어편 - 3 (0) | 2022.05.10 |
#자료구조와 함께 배우는 알고리즘 입문 C언어편 - 1 (0) | 2022.05.03 |