C++

C++ 포인터 연산

윤주승 2025. 3. 18. 19:02
#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];      // 사용자가 입력한 문자열보다 한칸 크게 
    strcpy(ps, animal);

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

먼저 animal 변수에 값을 입력하고, 포인터 ps는 내가 입력한 문자열보다 한칸 크게 만들었다.

이후, strcpy 함수를 사용해서 값을 복사했다.

전에 설명할 땐 값을 출력할때는 *를쓰고, 주소를 출력할때는 일반 변수를 쓴다했는데 여기 마지막 줄을 보면 일반 변수 ps로 출력한다.

그 이유는 문자열을 다룰 때 배열의 이름이나 포인터첫 번째 문자의 주소를 가리키기 때문이다.

 

동적 구조체를 생성하는 방법은 배열을 생성하는 방법과 동일하다.

#include <iostream>
#define SIZE 20

using namespace std;

int main() {

struct MyStruct {
    char name[20];
    int age;
};
    MyStruct* temp = new MyStruct;

    cout << "당신의 이름을 입력하세요\n";
    cin >> temp -> name;

    cout << "당신의 나이를 입력하세요\n";
    cin >> (*temp).age;

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

구조체를 생성한 후, 동적 구조체는 temp라는 객체를 만들면된다. 즉, temp는 MyStruct 타입의 객체를 힙 영역에 동적으로 생성한다.

화살표 연산을 사용해도되고, dot 연산자를 사용하려면 앞에 괄호를 붙여야한다.