배열의 이름은 배열의 첫번째 인덱스 값의 주소를 나타낸다고 하는데, 그래서
int a[3] = {1,2,3};
cout << *a<<endl; 의 출력값은 1 이고
cout << a<<endl; 의 출력값은 주소값이 출력되는 걸 확인하였습니다.
그런데, 590페이지의 예제가 이해가 안되서 질문드립니다.
위의 경우와 똑같이
char s[4] = "cat";
cout << *s<< endl; 의 출력값은 c가 나오지만
cout << s<< endl; 의 출력값은 왜 배열의 첫번째 주소값이 아닌, 문자열 cat이 출력되는지 이해가 안되서 질문드립니다.
안녕하세요 길벗수험서 운영팀입니다.
먼저 c++에 대한 제반지식이 부족하다는 것을 전제로 깔고 참고삼아 들으시면 될 것 같습니다.
cout는 console output의 약자입니다. 꺽쇠 뒤에 오는 변수의 자료형을 자동으로 인식하여 값을 출력하죠.
여기서 s가 주소값이 출력되지 않은 이유는 cout가 s 변수를 단순 배열 변수가 아닌 문자열로 인식했다고 예상됩니다.
일반적으로 String 형태의 자료형은 문자열의 시작주소를 출력값으로 지정했을 때 널이 저장된 마지막 위치-1까지 값을 출력하도록 되어있습니다.
해당 출력형태를 c언어로 보자면
char s[4] = "cat";
printf("%s", s);
가 되겠죠.
위의 출력형태로 보면 s는 문자 배열 s의 시작주소를 갖고 있으나, 해당 문자배열이 마지막에 널값이 저장된 문자열의 형태를 지니고 있기 때문에, %s 형태로 출력을 하게 되면 자동으로 마지막 값까지의 문자를 전부 출력하게 됩니다.
만약 출력하고 싶다면 일바적인 문자열을 출력하는 위의 코드가 아닌,
char s[4] = "cat";
printf("%p", s);
같은 형태의 c++코드를 작성해야 할 것입니다.
행복한 하루되세요 :)
-
관리자2020-03-12 11:38:36
안녕하세요 길벗수험서 운영팀입니다.
먼저 c++에 대한 제반지식이 부족하다는 것을 전제로 깔고 참고삼아 들으시면 될 것 같습니다.
cout는 console output의 약자입니다. 꺽쇠 뒤에 오는 변수의 자료형을 자동으로 인식하여 값을 출력하죠.
여기서 s가 주소값이 출력되지 않은 이유는 cout가 s 변수를 단순 배열 변수가 아닌 문자열로 인식했다고 예상됩니다.
일반적으로 String 형태의 자료형은 문자열의 시작주소를 출력값으로 지정했을 때 널이 저장된 마지막 위치-1까지 값을 출력하도록 되어있습니다.
해당 출력형태를 c언어로 보자면
char s[4] = "cat";
printf("%s", s);
가 되겠죠.
위의 출력형태로 보면 s는 문자 배열 s의 시작주소를 갖고 있으나, 해당 문자배열이 마지막에 널값이 저장된 문자열의 형태를 지니고 있기 때문에, %s 형태로 출력을 하게 되면 자동으로 마지막 값까지의 문자를 전부 출력하게 됩니다.
만약 출력하고 싶다면 일바적인 문자열을 출력하는 위의 코드가 아닌,
char s[4] = "cat";
printf("%p", s);
같은 형태의 c++코드를 작성해야 할 것입니다.
행복한 하루되세요 :)