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 연산자를 사용하려면 앞에 괄호를 붙여야한다.