구조체(struct)의 멤버 변수로 배열을 사용할 때 주의사항
에러 상황 : 구조체의 멤버 변수인 배열의 시작 주소에 문자열을 입력할 수 없음
#include <stdio.h>
typedef struct student
{
char no[10];
char name[20];
}STUDENT;
int main(void)
{
STUDENT stu;
stu.no = "2018316"; //에러
stu.name = "park"; //에러
printf("학번: %s, 이름: %s \n", stu.no, stu.name);
return 0;
}
[해결방법 1] strcpy함수 사용 : 문자열을 대입할 때 사용
#include <stdio.h>
#include <string.h>
typedef struct student
{
char no[10];
char name[20];
}STUDENT;
int main(void)
{
STUDENT stu;
strcpy (stu.no, "20101323");
strcpy (stu.name, "Park");
printf("학번: %s, 이름: %s \n", stu.no, stu.name);
return 0;
}
[해결방법 2] 구조체의 멤버 변수로 포인터 선언
#include <stdio.h>
typedef struct student
{
char* no;
char* name;
}STUDENT;
int main(void)
{
STUDENT stu;
stu.no = "2018316";
stu.name = "park";
printf("학번: %s, 이름: %s \n", stu.no, stu.name);
return 0;
}
구조체 내에서 외부 구조체를 참조하는 코드
(외부 참조 구조체)
#include<stdio.h>
struct point {
int x; // x좌표
int y; // y좌표
};
struct student {
char name[20];
struct point* link;
};
int main(void)
{
struct student stu1 = { "Kim", NULL };
struct student stu2 = { "Lee", NULL };
struct point p1 = { 30, 40 };
struct point p2 = { 60, 80 };
stu1.link = &p1;
stu2.link = &p2;
printf("%s %d %d \n", stu1.name, stu1.link->x, stu1.link->y);
printf("%s %d %d \n", stu2.name, stu2.link->x, stu2.link->y);
//printf("%s %d %d \n", stu2.name, (*stu2.link).x, (*stu2.link).y);
return 0;
}
공용체(union) 이해를 위한 코드
공용체 : 멤버 변수들 중 가장 큰 메모리 공간을 ‘공유’해서 사용
#include<stdio.h>
union point // 공용체 정의
{
int x;
int y;
};
struct student // 구조체 정의
{
int a;
int b;
};
int main(void)
{
printf("%d %d \n", sizeof(union point), sizeof(struct student)); //4,8
union point p; // 공용체변수선언
p.x = 10;
printf("%d %d \n", p.x, p.y);
return 0;
}
열거형(enum) 이해를 위한 코드
컴파일러는 실제로 열거형 멤버들을 정수형 상수로 인식
효과 : 프로그램의 가독성이 높아짐
#include<stdio.h>
enum week { ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN }; // 열거형 정의
enum season { SPRING, SUMMER = 2/*초기값 할당*/, FALL, WINTER }; // 열거형 정의
int main(void)
{
enum week p1, p2, p3; // 열거형 변수 p1, p2, p3 선언
enum season s1, s2, s3, s4; // 열거형 변수 s1, s2, s3, s4 선언
p1 = ONE;
p2 = TWO;
p3 = THREE;
printf("%d %d %d \n", ONE, TWO, THREE);
printf("%d %d %d \n", p1, p2, p3);
s1 = SPRING;
s2 = SUMMER;
s3 = FALL;
s4 = WINTER;
printf("%d %d %d %d \n", SPRING, SUMMER, FALL, WINTER);
printf("%d %d %d %d \n", s1, s2, s3, s4);
return 0;
}
//컴파일러는 실제로 열거형 멤버들을 정수형 상수로 인식
/* 실행 결과
0 1 2
0 1 2
0 2 3 4
0 2 3 4 */
'Language > C++' 카테고리의 다른 글
[C자료구조] 전화번호부1 - 순서에 관계없이 배열로 CRUD구현 (0) | 2021.08.01 |
---|---|
[C자료구조] 문자열 연습 (0) | 2021.07.31 |
_CRT_SECURE_NO_WARNINGS 오류 (0) | 2021.03.06 |
댓글