728x90

- 여러 개의 데이터를 하나로 묶어서 사용할 수 있도록 하기 위해 만들어짐

- 객체지향 프로그램의 모체가 됨

- 기존의 자료형으로 새로운 자료형을 만듬

더보기

자료형: char, int, double..

 

배열(array) : 형(type)이 같은 데이터를 하나의 묶으으로 처리하고자 할 때 사용하는 변수

구조체(structure): 한 개의 자료가 여러 개의 데이터 형(data type)으로 구성되는 복합 데이터형이다

 

#include <stdio.h>

struct person {

	//멤버 변수 : 구조체를 구성하는 요소
	char name[20]; //20바이트
	char phoneNum[20]; //20바이트
	int age; //4바이트
};

int main() {
	struct person stu1 = { "허미유","010-0000-0000", 20 };
	printf("이름 %s\n", stu1.name);
	printf("번호 %s\n", stu1.phoneNum);
	printf("나이 %d\n", stu1.age);

	printf("-------------------\n");

}



person이라는 이름의 구조체를 만들었다. 구조체 안에는 이름과 전화번호, 나이를 나타내는 자료형들이 있다.

메인함수에서 프린트할 사람의 이름, 전번, 나이를 넣고 프린트해보았다

이거 넣을때는 {} 안에 순서대로 이름 전번 나이 넣어주면됨

 

#include <stdio.h>

struct person {

	//멤버 변수 : 구조체를 구성하는 요소
	char name[20]; //20바이트
	char phoneNum[20]; //20바이트
	int age; //4바이트
};

int main() {
	
	
	struct person stu2; //구조체를 사용할수 있도록 변수선언
	strcpy(stu2.name, "허리아");
	strcpy(stu2.phoneNum, "010-1111-1111");
	stu2.age = 14;
	printf("이름 %s\n", stu2.name);
	printf("번호 %s\n", stu2.phoneNum);
	printf("나이 %d\n", stu2.age);

	printf("-------------------\n");


}



 이런 식으로 따로따로 값을 입력받을수도 있다. 

 

나오는 모양은 똑같다 

 

#include <stdio.h>

struct person {

	//멤버 변수 : 구조체를 구성하는 요소
	char name[20]; //20바이트
	char phoneNum[20]; //20바이트
	int age; //4바이트
};

int main() {
	
	//두 사람이 한꺼번에 나오게 하는거

	int i;
	struct person stulist[2] = {
		{"정수아","010-1233-4433",18},
		{"허푸들","010-2222-3333",11}
	};

	for (i = 0; i < 2; i++) {
		printf("이름: %s, 번호: %s, 나이: %d\n",
			stulist[i].name, stulist[i].phoneNum, stulist[i].age);
	}

	printf("-------------------\n");


}



 두 사람을 한꺼번에 출력하기 위해서 for문을 쓴 모습이다.

 

#include <stdio.h>
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable:4996)

struct person {

	//멤버 변수 : 구조체를 구성하는 요소
	char name[20]; //20바이트
	char phoneNum[20]; //20바이트
	int age; //4바이트
};

int main() {

	//for 문으로 받아서 여러개 출력하는거
	struct person stulist1[2];

	for (i = 0; i < 2; i++) {
		printf("이름, 번호, 나이 입력: \n");
		scanf("%s%s%d", stulist1[i].name, stulist1[i].phoneNum, &stulist1[i].age);
	}

	for (i = 0; i < 2; i++) {
		printf("이름: %s, 번호: %s, 나이: %d\n",
			stulist1[i].name, stulist1[i].phoneNum, stulist1[i].age);
	}


}



 이제 직접 사람정보를 입력해서 불러와보자. 똑같이 for문 사용 후 scanf를 사용했다. 

vs특성상 scanf_s를 사용했어야 했는데 이러면 두 값을 받지 못한다.

그래서 scanf를 씀. 그럼 에러가 뜨는데 이 에러를 무시하기 위해서 

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable:4996)

를 썼음. 아예 무시되서 잘 출력됨

 

결과

여기서 포인터를 사용해서 값을 바꿀수도 있다.

포인터 형태면 ->를 쓰면됨

 

#include <stdio.h>

struct person {

	//멤버 변수 : 구조체를 구성하는 요소
	char name[20]; //20바이트
	char phoneNum[20]; //20바이트
	int age; //4바이트
};

int main() {

	struct person stu1;
	strcpy(stu1.name, "허리아");
	strcpy(stu1.phoneNum, "010-1111-1111");
	stu1.age = 14;

	struct person* ptr; //구조체 포인터
	ptr = &stu1;
	ptr -> age = 25;
	printf("이름: %s\n", ptr->name);
	printf("전번: %s\n", ptr->phoneNum);
	printf("나이: %d\n", ptr->age);

}


이렇게 age를 포인터를 사용해서 25로 주입했더니 14가 25로 변하는 ㅁㅐ-직을 볼수있다

 

 

728x90

+ Recent posts