on
C++_4주차_정리
C++_4주차_정리
1. 동적메모리할당: new연산자
동적메모리반환: delete연산자
-> 구조체변수로 내부 멤버에 접근 (.) 도트연산자
#include #include #include 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 #include #include 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 #include #include 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; }
from http://ccclean.tistory.com/81 by ccl(A) rewrite - 2021-12-20 15:26:22