inflearn logo
강의

Course

Instructor

[10 minutes a day | C++] Introduction to C++ programming that anyone can easily learn

Pointer arithmetic

포인터 연산

384

fscreen78

2 asked

0

포인터 연산 강좌에서 아래와 같이 포인터를 선언하고 사용 하였는데요

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

int main()
{
	using namespace std;

	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;

	delete[] ps;
	

	return 0;
}

입력을 "판다"라고 하니, 이 구문 실행 결과가 아래와 같이 나오더라구요

복사된 동물 이름은 "판다"이고, 그 주소는 000002369E1F2E90 입니다.

[질문1.]

ps는 포인터로 선언 된건데, [ cout >> ps >> endl; ]의 출력 결과가 왜 메모리 주소가 아닌 [ 판다 ]인걸까요?

 

[질문2.]

메모리 주소를 출력하기 위해 (int*)ps로 형변환 하는 걸로 되어 있는데, 이 형변환이 어떤 의미인지 잘 모르겠습니다.

c++

Answer 2

0

gseyeon77512

안녕하세요 1번 질문 답변에 대한 질문이 있습니다.
문자열 데이터 출력을 위해 오버로딩이 존재한다고 말씀해주셨는데, 다른 타입(정수 등등)은 주소가 출력되는것이 맞는건가요?

 

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다.

[질문1.]에 대한 답변입니다.
ps는 char 타입의 포인터로, 문자열의 첫 번째 문자를 가리키는 주소를 저장합니다. C++에서는 char 포인터를 ostream에 넣을 때, 즉 cout을 통해 출력할 때 포인터가 가리키는 문자열 데이터를 출력하기 위한 특별한 오버로딩이 존재합니다. 따라서 cout << ps << endl; 코드에서 ps 포인터가 가리키는 문자열 “판다”가 출력된 것입니다.

[질문2.]에 대한 답변입니다.
(int*)psps 포인터를 int* 타입 즉, 정수형 포인터로 형변환하는 것을 의미합니다. 일반적으로 포인터는 메모리 주소를 저장하고 있으며, 이를 일반적인 정수 형태로 출력하기 위해서 사용됩니다. 출력 시 int*로 형변환하면 해당 포인터가 가리키는 메모리 주소의 정수 값을 출력할 수 있습니다. 하지만 참고적으로 C++에서는 포인터의 주소를 직접 출력할 경우 cout << static_cast<void*>(ps) << endl; 와 같이 void*로 형변환하여 출력하는 것이 일반적입니다.

질문에 도움이 되었기를 바랍니다. 추가적인 질문이 있으시다면 언제든지 문의해 주세요. 감사합니다.

switch 구문과 break continue 구문 강의 질문드립니다

0

54

1

opreator*

0

74

1

cin은 c언어에서의 scanf와 동일하다고 봐도 될까요?

0

139

0

질문이 있습니다.

0

107

1

temp1 선언

0

90

1

const MyStruct& 사용

0

112

0

인트형 포인터의 사이즈가 8이 나옵니다.

0

216

1

MyStruct* temp = new MyStruct; 에서 temp도 delete를 해야하나요?

0

126

1

#include <iostream> 중복

0

153

1

int sum=sumArr(arr. SIZE) 문의

0

136

1

4:04질문입니다.

0

110

1

4:39 질문입니다.

0

128

1

질문있습니다.

0

104

1

질문있습니다.

0

106

1

9:11 b에는 a이 주소값이 들어갔다고 하는데 *b의 값이 왜 a랑 같은 값이 나오나요?

0

159

1

빌드 실패 오류 질문 드립니다!

0

391

1

추상화와 클래스중 질문

0

174

1

질문사항 있습니다..동작을 안하고 있어요..

0

338

2

질문 드립니다

0

187

1

함수와 구조체 강의 음성이 이상합니다.

0

197

1

분할 컴파일 과정에서의 오류 발생

0

596

2

<<, >> 비트 연산자에 대한 설명이 맞나요?

0

447

2

비주얼 스튜디오 코드를 사용해도 되나요?

0

800

1

[정수형 자료형과 실수형 자료형] int보다 long이 더 크다고 했는데 왜 같은 값으로 나오는 건가요?

0

661

1