책 내용 질문하기
질문드립니다.
도서
2020 시나공 정보처리기사 필기 : NCS 기반 전면 개편 [기본서]
페이지
590
조회수
253
작성일
2020-03-11
작성자
탈퇴*원
첨부파일

배열의 이름은 배열의 첫번째 인덱스 값의 주소를 나타낸다고 하는데, 그래서 

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이 출력되는지 이해가 안되서 질문드립니다.

답변
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++코드를 작성해야 할 것입니다.

 

행복한 하루되세요 :)

  • 관리자
    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++코드를 작성해야 할 것입니다.

     

    행복한 하루되세요 :)

· 5MB 이하의 zip, 문서, 이미지 파일만 가능합니다.
· 폭언, 욕설, 비방 등은 관리자에 의해 경고없이 삭제됩니다.