Programming/C & C++

[C언어] 포인터 문자열 VS 배열 문자열 (같지 않다!)

만나쓰 2021. 2. 25. 16:43

포인터를 이용한 문자열"리터럴 문자열"로 내용 수정이 불가능

하지만 주소값 변경을 이용한 값 변경은 가능하다

 

배열을 이용한 문자열은 내용 수정이 가능

배열의 주소값 변경이 불가능하다 (arr++ 가 불가능)

 

 

아래 예시 참고

#include <stdio.h>

void func(char *str, char *arr)
{
	printf("%c\n", *str);	// str[0]문자 'p' 출력
	printf("%s\n", str);	// str 문자열 "pointer" 출력
	printf("%s\n", arr);	// arr 문자열 "array" 출력


	//str[0] = 'P';  포인터 문자열 = 리터럴 문자열 = 문자 값 수정 X
    	arr[0] = 'A';	// 배열 arr[0] = 'A' 로 값 수정 ("Array")


	printf("%s\n", arr);		// 배열 arr 문자열 "Array" 출력
	printf("%c\n", *arr);		// 배열 arr[0] 문자 'A' 출력
	printf("%c\n", *(arr + 1));	// 배열 arr[1] 문자 'r' 출력


	//printf("%c\n", ++arr);   불가능 (배열 주소값 변경 불가능)
}


int main()
{
	char *str = "pointer";		// 포인터 이용한 문자열
	char arr[] = "array";		// 배열 이용한 문자열

	func(str, arr);

	return 0;
}