게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
[질문/C언어]문자열 포인터와 문자 배열의 차이점이 궁금합니다.
게시물ID : programmer_6146짧은주소 복사하기
작성자 : 아침형사람
추천 : 1
조회수 : 1060회
댓글수 : 6개
등록시간 : 2014/10/23 13:19:20
옵션
  • 본인삭제금지
안녕하세요! 
"프로그래밍 면접 이렇게 준비한다." 책을 보면서 공부하고 있는 컴퓨터공학과 4학년 학생입니다.

문자열에 들어있는 단어들의 순서를 반대로 출력해주는 함수를 작성하기 위해 
함수의 파라미터로 문자열(char *)을 받도록 작성한뒤 
실제로 char형 포인터 변수를 넘겨서 값을 바꾸려고 시도하였으나 에러가 발생하였습니다.

저는 문자형 포인터(char *)를 함수에 넘겼기 때문에 당연히 함수 안에서 그 포인터가 가리키는 곳의 값, 
즉 문자열 값을 바꿀 수 있다고 생각했는데 바뀌지 않더군요..

그래서 아래처럼 테스트 코드를 만들고 실행해보았습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
 
void func(char * str)
{
    str[0] = 'A';
}
 
int main()
{
    char str1[] = "Hello World!\n";
    char * str2 = "Hello World!\n";
 
    func( str1 );
    func( str2 );    // 에러
 
    return 0;
}

main 함수 안에서 두개의 문자열을 만들었습니다.
하는 10번째 줄 처럼 배열의 형태로 선언하였고,
또 하나는 11번째 줄 처럼 char * 형으로 선언하였습니다.

그리고 그 두 문자열을 같은 함수에 넘겨보았습니다.

그랬더니 13번째 줄처럼 배열의 형태인 str1[] 을 넘겼을때는 함수안에서 값을 변경할 수 있었지만
14번째 줄처럼 char * 타입을 넘겼을때는 문자열의 값을 변경하려고 하자 에러가 발생하였습니다.

C언어에서 문자열은 곧 문자의 배열이고, 배열도 문자열의 처음 위치를 가리키는 포인터이기 때문에 
두 표현이 같다고 생각했는데 이런데서 차이점이 있었네요..

두 표현이 정확히 어떤 차이가 있는지 궁금합니다.
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호