반응형
구조체(struct)란?
- 여러 자료형(int, double 등)을 하나로 묶어서 표현할 수 있도록 함.
- struct [자료형] 형태. 즉, 사용자 정의 자료형을 만듦.
- 구조체를 만들면 여러 자료형을 담고 있는 구조 하나만을 선언해서 가져올 수 있다.
#define _CRT_SECURE_NO_WARNINGS
# include <stdio.h>
// x, y점은 서로 독립된 것이 아니라, 하나의 정보를 표현한다.
// 좌표점 세트(구조체)를 아래와 같이 정의
struct point
{
int xpos;
int ypos;
};
// 구조체를 이용해서 좌표간 거리 구하기
int main()
{
// 각각 x,y좌표를 지닌 2개의 구조체 생성.
struct point pos1, pos2;
double distance;
fputs("1번째 좌표: ", stdout);
scanf("%d %d", &pos1.xpos, &pos1.ypos);
fputs("2번째 좌표: ", stdout);
scanf("%d %d", &pos2.xpos, &pos2.ypos);
// 두 좌표 입력된 값 출력
printf("첫번째 좌표점 : %d, %d\n", pos1.xpos, pos1.ypos);
printf("두번째 좌표점 : %d, %d\n", pos2.xpos, pos2.ypos);
return 0;
}
위와 같은 방식으로 구조체 인스턴스(pos1, pos2)를 생성하고, 그 내부에 인자를 하나씩(pos1.xpos, pos1.ypos) 빼서 쓸 수 있다. 인스턴스에서 내부 인자에 접근하는 방법은 마침표(.)을 사이에 넣으면 된다.
반응형
<여러 타입(Type)자료형을 넣은 구조체>
인적정보가 담긴 구조체를 생성.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
// char와 int 자료형이 섞여있는 구조체 생성 (인적 데이터)
struct person
{
char name[20];
char phoneNum[20];
int age;
};
int main()
{
// man1 과 man2 두 구조체인스턴스 생성.
struct person man1, man2;
// man1에 대한 데이터 생성. (strcpy함수를 이용해 문자열 복사)
strcpy(man1.name, "홍길동");
strcpy(man1.phoneNum, "010-1234-5678");
man1.age = 23;
// man2에 대한 데이터는 사용자 입력 받음
printf("이름 입력: ");
scanf("%s", man2.name);
printf("번호 입력: ");
scanf("%s", man2.phoneNum);
printf("나이 입력: ");
scanf("%d", &(man2.age));
printf("첫번째 사람 이름: %s \n", man1.name);
printf("첫번째 사람 번호: %s \n", man1.phoneNum);
printf("첫번째 사람 나이: %d \n", man1.age);
printf("두번째 사람 이름: %s \n", man2.name);
printf("두번째 사람 번호: %s \n", man2.phoneNum);
printf("두번째 사람 나이: %d \n", man2.age);
return 0;
}
구조체 인스턴스 man1은 자동입력된 데이터, man2는 유저의 입력은 받는 데이터.
구조체의 Type은 char과 int가 함께 들어가있다.
<구조체 선언과 동시에 변수까지 선언하기>
아래과 같이 main에서 구조체 인스턴스를 선언할 필요없이, 구조체 생성과 동시에 선언이 가능하다.
} 뒤에 띄어쓰기가 반드시 있어야 한다.
<구조체 선언과 동시에 초기화 하기>
아래과 같이 선언과 동시에 값을 넣으면, 구조체에 있는 변수 순서대로 값이 들어간다.
#include <stdio.h>
struct point
{
int xpos;
int ypos;
};
struct person
{
char name[20];
char phoneNum[20];
int age;
};
// 초기화 방식이 배열과 유사함.
// 초기화 할 데이터들을 중괄호 안에 순서대로 나열하면 된다.
int main()
{
struct point pos = { 10, 20 };
struct person man = { "이승기", "010-1234-5678", 21 };
printf("%d %d \n", pos.xpos, pos.ypos);
printf("%s %s %d \n", man.name, man.phoneNum, man.age);
return 0;
}
반응형
'C언어 \ C++' 카테고리의 다른 글
[C언어] C언어 최대 공약수 구하기 알고리즘 예제 (재귀함수 최대공약수) (0) | 2022.03.18 |
---|---|
[C언어] 구조체(struct)에 배열을 선언하여 사용 방법, 선언과 동시에 초기화 (0) | 2022.03.03 |
[C언어] 두 문자열(string)을 합치는 함수 (strcat함수, strncat함수) (0) | 2022.02.27 |
[C언어] 두문자열(string)을 비교하는 함수. 서로 같은가 비교 (strcmp 함수) (0) | 2022.02.27 |
[C언어] 문자열(string)을 복사하는 함수 (문자열 메모리를 복사, strcpy, strncpy 함수) (0) | 2022.02.27 |