inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[하루 10분|C++] 누구나 쉽게 배우는 C++ 프로그래밍 입문

포인터 연산

질문있습니다.

105

Sendyt

작성한 질문수 7

0

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

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

이 코드에서 animal하고 ps에 pandas가 그대로 출력된 이유를 모르겠습니다.

c++

답변 1

0

인프런 AI 인턴

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

Sendyt님께서 공유해주신 코드에서 animal과 ps에 “pandas”라는 값이 그대로 출력되는 이유는 C++에서 문자열을 다룰 때 사용되는 방식 때문입니다. 여기서 animalps 두 변수는 문자열 또는 문자 배열을 가리키는 포인터일 가능성이 높습니다.

C++에서 문자열은 char 타입의 배열로 처리되곤 합니다. cout을 사용해 문자열 포인터를 출력하라고 명령하면, 이 포인터가 가리키는 위치부터 널 문자('\0')가 나타날 때까지의 모든 문자들이 출력됩니다. 따라서, “pandas”라고 저장되어 있는 메모리의 시작 주소를 cout으로 출력하라고 하면, “pandas”라는 문자열이 그대로 출력되는 것입니다.

cout << (int*)animal과 같은 방식으로 주소를 출력하려고 시도한 것 같지만, 이 경우에도 animal 변수가 문자열을 가리키고 있기 때문에, 문자열의 주소 대신 문자열 자체가 출력됩니다. 실제 메모리 주소를 출력하고 싶다면 reinterpret_cast를 사용하여 주소를 명시적으로 정수 타입으로 변환해야 합니다. 예를 들면, cout << reinterpret_cast<int*>(animal)과 같은 방식으로 코드를 작성할 수 있습니다.

이 조언이 Sendyt님의 궁금증을 해결하는 데 도움이 되길 바랍니다.

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

0

56

1

opreator*

0

75

1

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

0

140

0

질문이 있습니다.

0

108

1

temp1 선언

0

91

1

const MyStruct& 사용

0

113

0

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

0

217

1

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

0

127

1

#include <iostream> 중복

0

155

1

int sum=sumArr(arr. SIZE) 문의

0

137

1

4:04질문입니다.

0

111

1

4:39 질문입니다.

0

129

1

질문있습니다.

0

107

1

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

0

160

1

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

0

393

1

추상화와 클래스중 질문

0

175

1

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

0

339

2

질문 드립니다

0

188

1

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

0

199

1

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

0

601

2

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

0

449

2

포인터 연산

0

387

2

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

0

803

1

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

0

664

1