배열이름 포인터 관련 질문드립니다.
안녕하세요? 강의를 보다가 궁금한 점이 생겨 질문드립니다.
Q1. 10번줄과 15번줄을 비교했을 때, 둘 다 배열의 이름을 넣었지만 전자는 주소값이 출력이 되고 후자는 문자열이 출력되는 이유가 궁금합니다. (아마 타입형이 달라서 이러한 결과가 나타는것 같은데 어떠한 원리인지 궁금합니다.)
Q2. 8번줄과 13번줄을 비교했을때, 전자는 주소값이 출력이 되고 후자는 문자열이 출력되는 이유가 궁금합니다. (13줄은 배열의 첫번째요소에 &를 붙였으니 주소값이 출력될것을 기대하고있었는데 문자열이 출력되었습니다.)
Q3. C언어의 printf는 출력할때 서식문자를 지정했지만, C++의 cout은 서식문자를 지정하지 않고있습니다. cout이 내부적으로 어떻게 값을 출력하는지 궁금합니다.
감사합니다.
Answer 2
3
1. cout 은 char 배열 혹은 char 포인터가 들어오면 문자열로 인식하여 주소값이 아닌 그 문자열 내용을 출력하게끔 설계가 되어 있기 때문입니다. 즉, char 배열 이름을 넘기면 그 배열 이름 값(=첫번째 원소의 주소값)이 아닌 그 주소에 해당하는 문자열부터 '\0' 을 만날 때까지 출력이 되게끔 구현이 되어 있습니다. 그렇기 때문에 진짜 주소값을 출력하고 싶다면 배열이름에 &을 붙여서 넘겨야 합니다.
(배열이름 = &배열이름 이 둘이 값이 같긴 하지만 타입은 다릅니다. 배열이름은 타입이 char *, &배열이름은 타입이 char *[n] 대충 이런 것일겁니다! cout은 char * 타입의 데이터가 << 연산의 피연산자로 들어오면 그 값 그대로가 아닌 그 값이 가리키는 데이터를 연속적으로, 즉 문자열을 출력하게끔 구현이 되어있는 것입니다.)
2. 1번 답변으로 설명이 될 것 같습니다.
3. printf 는 함수이지만 cout 은 객체입니다. cout 은 ostream 클래스로부터 만들어진 객체입니다. (이 클래스는 iostream 헤더에 정의가 되어 있구요!) 그러니 ostream 클래스에서 << 연산자를 만나면 어떠어떠하게끔 출력 일을 해라! 이런식으로 정의가 되어있을 것 같네요! (9단원에서 입출력 연산자 오버로딩을 배우시면 이해가 되실겁니다.)
0
답변 감사합니다. 추가적으로 질문드려요.
char name[] = "Hello world!";
이렇게 배열의 첫번째 요소의 주소값을 출력하고싶을땐 형변환을 해주는 방법밖에없나요?
0
이런식으로 하는 방법도 있습니다.
일단 배열 이름 그대로는 안될 것 같구요 (문자열 내용으로 출력해주니까요) 배열 이름에 & 를 붙여보세요! 두번째 원소의 주소를 출력하고 싶다면 포인터 산술연산에서 배우신대로 +1 해주시면 됩니다.
변수가 메모리에 저장되는 것을 알려주는 강의가 어떤강의였죠
1
470
1
메모리 주소 10진수로 출력
1
655
1
클래스 템플릿 특수화에서 boolalpha로 표현된 리턴값에 대해 질문이 있습니다.
1
501
1
여러가지 리턴 타입에 관한 강의가 어떤 걸까요?
1
534
1
메모리 주소에 관한 질분
0
679
1
인터페이스 클래스에서 reportError의 매개변수에 대해 궁금한 것이 있습니다.
0
553
1
형변환 오버로딩에서 const 관련 질문이 있습니다.
0
445
1
Digit 뒤에 reference를 사용하는 이유
0
510
1
4.2 전역 변수, 정적 변수, 내부 연결, 외부 연결
0
324
1
dat파일이...
0
540
1
TODO:대입 연산자 오버로딩에 대한 소스코드입니다.
0
646
1
복사 생성자 관련 질문이 있습니다.
0
454
1
수업 중 궁금한점이 있습니다.
1
390
1
라이브러리자체가 이해가 되지 않습니다.
0
562
1
마지막 예제 질문
0
304
1
증감연산자 위치에 따른 수행 순서 질문입니다.
0
378
1
단항 연산자 오버로딩에서 return 부분에 질문이 있습니다.
1
413
1
friend함수 관련 질문이 있습니다.
0
312
1
operator+ 정의부분에서 궁금한 것이 있습니다.
0
447
1
3분 17초 질문
0
352
1
함수에 값을 대입한다는 개념이 이해가 되지 않습니다.
0
448
1
int getvalue() const에서 const는 왜 뒤에 붙는건가요?
0
449
2
const Something &st에서 const를 빼면 안되나요?
0
301
1
friend함수는 다른 클래스의 멤버함수로 쓸 수 없나요??
1
494
1

