티스토리 뷰
개발자의 C언어 독학 기초 # 구조체
모든 강의 자료 : www.codingnow.co.kr/
구조체에 대해 설명한다.
실무에서 수많은 변수들을 각각 선언해서는 변수 관리가 불가능하다.
즉, 한두개 정도면 모를까 변수가 늘어나면 어떤 변수가 있는지 파악도 어렵고 불필요한 변수를 하나하나
찾아 내는 것도 곤욕이다.
구조체는 이런 문제에서 많은 도움을 준다.
같은 기능 별로 묶어 두면 기능 별로 변수관리가 수월해 지게 된다.
이전 함수 강의에서 사용된 소스를 이용해 구조체를 사용한 형태로 변형을 해본다.
https://cflab2017.tistory.com/26
searchMaxType 라는 구조체를 선언했고
typedef struct{
int a;
int b;
}searchMaxType;
var 이란 searchMaxType 타입의 변수를 선언했다.
소스 코드를 보면 구조체로 선언된 각 원소들은 "." dot 으로 접근하게 된다.
searchMaxType var[5]; //구조체 선언
for(int i=0; i<5; i++) //선언된 구조체에 값을 초기화 한다.
{
var[i].a = a[i];
var[i].b = b[i];
}
.
.
.
max = SearchMax(var[i].a, var[i].b);
printf("\na = %d, b = %d, max = %d\n",a[i],b[i],max);
소스를 비교해 보면 불필요하게 코드가 늘어 난것 처럼 보이지만 최소한의 변경을하여 구조체의 사용법을 설명해서이다.
#include <stdio.h>
#include <windows.h>
typedef struct{
int a;
int b;
}searchMaxType;
//함수(Function)
int SearchMax(int val1, int val2)
{
int max;
if(val1 > val2)
{
max = val1;
}else{
max = val2;
}
return max;
}
void main(void)
{
system("chcp 65001"); //gcc 한글 깨짐
system("cls"); //화면지움
int a[5] = {10, 11, 33, 44, 88};
int b[5] = {20, 14, 23, 34, 85};
int max;
searchMaxType var[5]; //구조체 선언
for(int i=0; i<5; i++) //선언된 구조체에 값을 초기화 한다.
{
var[i].a = a[i];
var[i].b = b[i];
}
for(int i=0; i<5; i++)
{
max = SearchMax(var[i].a, var[i].b);
printf("\na = %d, b = %d, max = %d\n",a[i],b[i],max);
}
return;
}
결과 같은 동일하다.
아래는 코드를 좀더 변경한 것이다.
함수 인자(parameter)를 포인터로 받는 경우이다.
구조체가 포인터로 선언된 경우에는 각 원소를 "->"로 접근한다.
#include <stdio.h>
#include <windows.h>
typedef struct{
int a;
int b;
}searchMaxType;
//함수(Function)
int SearchMax(searchMaxType *varp)
{
int max;
if(varp->a > varp->b)
{
max = varp->a;
}else{
max = varp->b;
}
return max;
}
void main(void)
{
system("chcp 65001"); //gcc 한글 깨짐
system("cls"); //화면지움
int a[5] = {10, 11, 33, 44, 88};
int b[5] = {20, 14, 23, 34, 85};
int max;
searchMaxType var[5]; //구조체 선언
for(int i=0; i<5; i++) //선언된 구조체에 값을 초기화 한다.
{
var[i].a = a[i];
var[i].b = b[i];
}
for(int i=0; i<5; i++)
{
max = SearchMax(&var[i]);
printf("\na = %d, b = %d, max = %d\n",a[i],b[i],max);
}
return;
}
이 또한 결과 같은 동일하다.
약간 수준을 높여서 구조체를 포인터로 받았을때 다른 형태의 코드를 만들면 아래와 같이 만들 수도 있다.
#include <stdio.h>
#include <windows.h>
typedef struct{
int a;
int b;
}searchMaxType;
//함수(Function)
int SearchMax(searchMaxType *varp)
{
int max;
if(varp->a > varp->b)
{
max = varp->a;
}else{
max = varp->b;
}
return max;
}
void main(void)
{
system("chcp 65001"); //gcc 한글 깨짐
system("cls"); //화면지움
int a[10] = {10, 11, 33, 44, 88,20, 14, 23, 34, 85};
int max;
searchMaxType *var; //구조체 선언
var = (searchMaxType *)a;
for(int i=0; i<5; i++)
{
max = SearchMax(&var[i]);
printf("\na = %d, b = %d, max = %d\n",(&var[i])->a,(&var[i])->b,max);
}
return;
}
결과 값은 이전과 조금 다른다.
a 배열 변수의 2개씩 구조체로 접근을 했기 때문이다.
이해하기도 약간 어려울 수도 있다.
기초를 배우고 있는 단계라면 당연하다고 생각한다.
하지만 모든 것이 익숙해지는 날 너무도 쉽게 사용하게 된다.
지금까지 코드를 잘 따라 왔다면 프로그래밍 문법을 어떻게 사용하는냐에 따라 형태가 수도 없이 변형 될 수 있다.
즉, 다시 한번 강조 하지만 수 많은 코드의 형태를 이해 할 때까지 보고 내 것으로 익숙해지는것이 일류 프로그래머로 갈 있는 지름길 이다.
'C언어 강의' 카테고리의 다른 글
개발자의 C언어 독학 기초 # 응용 / 삽입정렬 (0) | 2020.04.14 |
---|---|
개발자의 C언어 독학 기초 # 응용편 / 버블정렬 bubble sort (0) | 2020.04.14 |
개발자의 C언어 독학 기초 # 함수 (0) | 2020.04.14 |
개발자의 C언어 독학 기초 # 포인터 (0) | 2020.04.13 |
개발자의 C언어 독학 기초 # 기본 연산 (0) | 2020.04.11 |