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 |