컴퓨터/C
사용자 정의 자료형인 구조체도 포인터 변수를 통해 제어를 할 수 있습니다. 구조체 포인터를 사용하면 다른 포인터 변수들처럼 다른 지역에서 해당 지역에 있는 변수를 제어를 가능하게 합니다.
기본 자료형 포인터의 경우 저장된 메모리 주소 부터 자료형의 크기까지의 메모리 공간을 제어할 수 있습니다.
하지만 구조체의 경우 사용자 정의 자료형이며, 여러가지 자료형이 묶여서 만들어진 형태입니다.
포인터를 사용하여 구조체 안의 묶여있는 각각의 자료형에 접근을 할수 있는 문법적 약속이 필요합니다.
구조체 포인터의 선언은 기본 자료형 포인터와 동일합니다.
typedef struct Job
{
char name[10];
int att;
int HP;
}JOB;
int main()
{
JOB job[3];
JOB* pjob;
return 0;
}
typedef에 관련된 내용은 아래 링크 참조하세요
포인터 선언을 마쳤으면 구조체 포인터를 통해 접근하기 위해 job[3]배열에 정보를 입력하고 pjob에 메모리 주소를 넣어 줍시다.
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
typedef struct Job
{
char name[10];
int att;
int HP;
}JOB;
int main()
{
JOB job[3];
JOB* pjob;
pjob = &job
strcpy(job[0].name, "전사");
job[0].att = 10;
job[0].HP = 200;
strcpy(job[1].name, "도적");
job[1].att = 20;
job[1].HP = 100;
strcpy(job[2].name, "궁수");
job[2].att = 15;
job[2].HP = 150;
}
구조체 포인터를 이용하여 멤버변수에 접근하기 위해서는 2가지 방법이 있습니다.
(*pjob).name
pjob->name
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
typedef struct Job
{
char name[10];
int att;
int HP;
}JOB;
int main()
{
JOB job[3];
JOB* pjob;
pjob = &job
strcpy(job[0].name, "전사");
job[0].att = 10;
job[0].HP = 200;
strcpy(job[1].name, "도적");
job[1].att = 20;
job[1].HP = 100;
strcpy(job[2].name, "궁수");
job[2].att = 15;
job[2].HP = 150;
printf("%s\n", pjob->name);
printf("%s\n", (pjob+1)->name);
printf("%s\n", (pjob+2)->name);
}
위의 예제를 응용해서 다음과 같은 프로그램을 만들어 봅시다.
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
typedef struct Job // 구조체의 정의
{
char name[10];
int att;
int HP;
}JOB;
void SetingJob(JOB* pjob,int index) // Set함수 만들기 구조체 포인터를 매개 변수로 선언
{
printf("===== %d번째 직업 생성 하기 =====\n\n", index);
printf("===== %d번째 직업 이름 : ", index);
scanf("%s", &pjob->name);
printf("===== %d번째 직업 공격력 : ", index);
scanf("%d", &pjob->att);
printf("===== %d번째 직업 체력 : ", index);
scanf("%d", &pjob->HP);
return;
}
int main()
{
JOB job[3]; // 직업값을 저장할 구조체 배열 선언
printf("===== 직업 셋팅 에디터 프로그램 =====\n\n");
for (int i = 0; i < 3; i++) // for문을 이용하여 set함수 진입 및 셋팅 함수 종료후 값 확인
{
SetingJob((job + i), i + 1);
printf("===== %d번째 직업 셋팅이 완료 되었습니다. =====\n", i + 1);
printf("======= %d번째 직업 이름 : %s\n", i + 1, job[i].name);
printf("======= %d번째 직업 공격력 %d\n", i + 1, job[i].att);
printf("======= %d번째 직업 체력 : %d\n", i + 1, job[i].HP);
}
printf("\n===== 직업 셋팅 에디터를 종료합니다. =====\n");
return 0;
}
위의 소스코드 처럼 main함수에 필요한 구조체 변수(job [3])을 저장하고 구조체 포인터를 통하여 set함수에서 설정이 가능합니다. 이런 식의 소스코드는 다양한 장점을 가질 수 있습니다.
C 언어 - Stack Frame (스택 프레임) (0) | 2021.06.26 |
---|---|
C 언어 - 다중 포인터 (2) | 2021.06.24 |
C 언어 - typedef 키워드 (0) | 2021.06.22 |
C 언어 - struct(구조체) (0) | 2021.06.22 |
C 언어 -포인터와 배열 (0) | 2021.06.21 |
91년생 공학엔지니어의 개발일지
TODAY :
YESTER DAY :
TOTAL :
Commnet