본문 바로가기
Software/C++

[C++ 기초] 13. 포인터 심화

by 리미와감자 2023. 3. 22.

Code 1

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#define SIZE 20

using namespace std;

int main() {

    char animal[SIZE];
    char* ps;

    cout << "동물 이름을 입력하십시오.\n";
    cin >> animal;

    ps = new char[strlen(animal) + 1]; // 입력한 문자열 + 1 크기. 실행 시간에 배열 크기 결정.
    strcpy(ps, animal); // 문자열 복사

    cout << "입력하신 동물 이름을 복사하였습니다." << endl;
    cout << "입력하신 동물 이름은 " << animal << "이고, 그 주소는 " << (int*)animal << " 입니다." << endl;
    cout << "복사된 동물 이름은 " << ps << "이고, 그 주소는 " << (int*)ps << " 입니다." << endl;

    delete[] ps;
    return 0;
}

 

결과

더보기

동물 이름을 입력하십시오.
Dog
입력하신 동물 이름을 복사하였습니다.
입력하신 동물 이름은 Dog이고, 그 주소는 000000FAA7B0F9A8 입니다.
복사된 동물 이름은 Dog이고, 그 주소는 0000028CEB746F50 입니다.

동적 메모리를 사용하므로, 사용자 입력으로 데이터를 받을 때 메모리를 결정할 수 있다.

animal에 입력된 동물(Dog)을 ps에 복사하는 과정이다. 두 변수의 주소가 다른 것을 확인할 수 있다.

 

 

Code 2

#include <iostream>
#define SIZE 20

using namespace std;

struct MyStruct
{
    char name[20];
    int age;
};

int main() {

    MyStruct* temp = new MyStruct;

    cout << "당신의 이름을 입력하십시오.\n";
    cin >> temp->name;

    cout << "당신의 나이를 입력하십시오.\n";
    cin >> (*temp).age; //'->'와 같은 의미

    cout << "안녕하세요! " << temp->name << "씨!\n";
    cout << "당신은 " << temp->age << "살 이군요!\n";

    delete temp;
    return 0;
}

 

결과

더보기

당신의 이름을 입력하십시오.
리미
당신의 나이를 입력하십시오.
29
안녕하세요! 리미씨!
당신은 29살 이군요!

 

 

 

 

정적 구조체 멤버 연산자 : .
동적 구조체 멤버 연산자 : ->

 

->는 (*변수).멤버와 같은 의미이다.

댓글