C++_4주차_정리

728x90

1. 동적메모리할당: new연산자

   동적메모리반환: delete연산자 

-> 구조체변수로 내부 멤버에 접근 (.) 도트연산자 

#include <iostream> 
#include<stdio.h>
#include <string>

using namespace std;

typedef struct student { //구조체
	int ID;
	int Age;
	char Name[30];
	float GPA; //학점평균 
}student;

int main() {
	student st1;
	student st2;
	student st3 = { 202001, 20, "Michael", 4.0 }; //선언과 동시에 초기값 지정 
	//구조체타입 배열 
	student st4[3] = {
		{202002, 22, "Kim", 4.1},
		{202003, 23, "Lee", 4.2},
		{202004, 24, "Park", 4.3}, }; 

	st1.ID = 202010;
	st1.Age = 19;
	//st1.Name = "CHoi"; (X)
	strcpy_s(st1.Name, "Choi"); //오른쪽 문자열을 왼쪽 변수에 copy
	st1.GPA = 4.5;
	
	//st1출력 
	cout << endl;
	cout << "st1: " << endl;
	cout << " , ID  = " << st1.ID << ", Age = " << st1.Age << ", Name = " 
				<< st1.Name << ", Gpa = " << st1.GPA << endl;
	//st2출력 
	st2 = st1; 
	cout << endl;
	cout << "st2: " << endl;
	cout << " , ID  = " << st2.ID << ", Age = " << st2.Age << ", Name = " 
					<< st2.Name << ", Gpa = " << st2.GPA << endl;
	//구조 동일한 구조체 끼리 = 연산자로 copy 가능 
	//단, 일반 배열에는 = 대입연산자로 copy 불가능 
	//단, 벡터는 = 대입연산자로 copy 가능 

	//st4[] 구조체 배열 내부 멤버 출력 
	cout << endl;
	for (int i = 0; i < 3; i++) {
		cout << "st4 : " << st4[i].ID << ", Age = " << st4[i].Age << ", Name = " << st4[i].Name 
							<< ", Gpa = " << st4[i].GPA << endl;
	}
	return 0; 
}
 

2. 구조체 포인터 사용 [구조체 포인터로 내부 멤버 접근 시 ->연산자 사용 ]

#include <iostream> 
#include<stdio.h>
#include <string>

using namespace std;

typedef struct student { //구조체
	int ID;
	int Age;
	char Name[30];
	float GPA; //학점평균 
}student;

int main() {
	student st1;

	student* ptr1, *ptr4; //구조체형 포인터변수 
	//구조체타입 배열 
	student st4[3] = {
		{202002, 22, "Kim", 4.1},
		{202003, 23, "Lee", 4.2},
		{202004, 24, "Park", 4.3}, };

	st1.ID = 202010;
	st1.Age = 19;
	strcpy_s(st1.Name, "Choi");
	st1.GPA = 4.5;

	ptr1 = &st1; 

	//구조체 포인터로 st1 지칭해서 내부 멤버 출력하기 
	cout << endl;
	cout << "st1: " << endl;
	cout << "ID = " << ptr1->ID << ", Age = " << ptr1->Age << ", Name = " << ptr1->Name << ",GPA = " << ptr1->GPA << endl;

	for (int i = 0; i < 3; i++) { //ptr4로 st4[] 지칭해서 내부 멤버 출력하기 
		ptr4 = &st4[i];
		cout << "ID = " << ptr4->ID << ", Age = " << ptr4->Age << ", Name = " << ptr4->Name << ",GPA = " << ptr4->GPA << endl;

	}

	return 0; 

}
 
3. 연결리스트 구현 (정적 할당 VS 동적 할당)
#include <iostream> 
#include<stdio.h>
#include <string>
using namespace std;

typedef struct Node {
	int ID;
	int data;
	Node* next; //다음 연결될 노드 지칭 포인터
}Node;
int main() {
	Node n1, n2, n3; //메모리 정적할당 
	Node* LL1; //연결리스트 시작 포인터 (시작지칭)
	Node* LL2;

	cout << endl << endl;
	n1.ID = 1; 
	n1.data = 111;
	n1.next = &n2; //n1 뒤에 n2

	n2.ID = 2;
	n2.data = 222; 
	n2.next = &n3; //n2 뒤에 n3

	n3.ID = 3;
	n3.data = 333;
	n3.next = NULL;  //마지막 노드 

	LL1 = &n1; //시작 포인터에 n1연결 
	//LL1포인터만 갖고 있으면 위의 연결리스트는 포인터 따라 가면 된다.

	Node* LL1_c = LL1;
	while (LL1_c != NULL) { //연결리스트의 끝 아닌동안 반복 
		cout << "ID  =" << LL1_c->ID << ", data = " << LL1_c->data << endl;
		LL1_c = LL1_c->next; //다음 노드로 이동 
	}
	cout << endl << endl;

	//동적메모리 할당 new 
	Node* ptr2, * ptr3;
	ptr2 = new Node; //동적으로 Node 크기 공간 할당
	ptr2->ID = 1;
	ptr2->data = 111;
	ptr2->next = NULL;
	LL2 = ptr2; //동적 연결리스트 시작 포인터 옮겨주기 

	ptr3 = new Node;
	ptr3->ID = 2; 
	ptr3->data = 222;
	ptr3->next = NULL;

	ptr2->next = ptr3; //ptr2 -> ptr3 연결시켜주기 
	ptr2 = ptr3;
	return 0; 
}

728x90

'C++, C언어 > [문법]_C++' 카테고리의 다른 글

C++_6주차_정리  (0) 2021.12.20
C++_5주차_정리  (0) 2021.12.20
C++_3주차_정리  (0) 2021.12.20
C++_2주차_정리  (0) 2021.12.20
C++_1주차_정리  (0) 2021.12.20