[Dev C] C언어 문자열 char 질문

조회수 757회

문자열을 입력하고 출력할 때 쓰는 char* 을 쓰는데, 들어보니까 문자열을 입력하고 출력할때는 코드를 char q[100]; 이렇게 변수 이름 뒤에 숫자를 써야한다더군요. 쓰는 이유가 궁금합니다.

쉽게 설명 부탁드려요

아 그리고 이렇게 문자열을 출력할땐 scanf("%s", q) 이렇게 변수 이름 앞에 & 기호를 안붙혀도 된다는데 그건 또 왜인가요?

  • (•́ ✖ •̀)
    알 수 없는 사용자
  • 내가 언제 char* q[100]; 이렇게 가르쳐줬습니까? nowp 2020.9.29 15:29
  • 수정했습니다 알 수 없는 사용자 2020.9.29 15:40
  • 음 그런데 저 * 이거 쓰는거랑 안쓰는거랑 다른게 문자형이랑 문자열인데 문자열을 출력하는 건데 그걸 쓰면 안되는건가요? 알 수 없는 사용자 2020.9.29 15:41
  • " * 이거 쓰는거랑 안쓰는거랑 다른게 문자형이랑 문자열인데 " 이 말 확실해요? 그 차이를 잘 이해하고 있어야 합니다. 그것 이해하면 모든 게 자연스럽게 이해가 갈 거에요. nowp 2020.9.29 16:40
  • 개인적으로 진짜 하나도 모르신다면 질문보다는 책 혹은 강의를 보시는거 추천드려요. 김호원 2020.9.30 18:46

1 답변

  • 먼저 말씀드리자면, 배열과 포인터는 다릅니다.

    (변수 이름 뒤에 숫자를 적는 것이 배열인데, 배열이 뭔지 모르겠다면 기본서를 다시 보고, 이글을 읽어 주시기 바랍니다.)

    char * 는 문자가 저장된 변수의 주소를 가리키는 포인터입니다. 배열과는 다릅니다.(기본서를 보세요.)

    선언과 초기화 단계에서, char * p = "hello" ; 라고 썼다 칩시다. 여기서 문자열 hello는 문자열 리터럴이므로 변경이 불가 합니다. 즉, 쉽게말하자면, char 형 배열에 저장된 값이 아닌, 읽기 전용으로 '메모리 어딘가'에 저장된 문자열 상수 입니다.

    하지만 포인터 p를 이용해서, 배열에 접근해 데이터를 변경하는 것은 됩니다.

        char q[100]="hello";
        char* p = q;
        printf("%c", *p);
    
    

    두번째로, char q[100] 은 배열이므로, 데이터의 입/출력이 가능합니다. int 형 배열에 숫자를 넣고, 출력하는 것과 비슷합니다.(똑같지는 않습니다.)

    질문 2.

    그리고 scanf함수는 문자열을 입력 받아올 때 쓰는 함수입니다.

    scanf("%s", q)라고 쓰는 이유는 q가 '배열의 이름'이기 때문입니다.

    '배열의 이름'이 무엇을 뜻하는지 생각해보면 답을 유추해내실 수 있습니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)