728x90

상수 형태의 문자열을 가리키는 포인터

포인터의 주소값을 찾아가서 수정할 수 있다

 

#include <stdio.h>

int main() {

	char str[6] = { 'H','e','l','l','o','\0' }; // /0 : null 값

	//변수 형태의 문자열: 자동으로 문자 개수만큼 배열 크기가 설정됨
	char str1[] = "welcome";

	//상수 형태의 문자열: 문자가 저장되어 있는 시작위치의 주소를 str2 포인터 변수에 돌려줌
	char* str2 = "Hello"; //접근이 아니라 포인터 변수인걸 알려주기 위함 / 변수 앞에 있는건 접근하라는뜻

	printf("%s %s %s \n", str, str1, str2);

	//str1[] = "Good"; //가리키는 대상 변경 불가능
	str2 = "World"; //가리키는 대상 변경 가능
	printf("%s %s %s \n", str, str1, str2);

	str1[0] = 'X'; //문자열 변경 가능
	//str2[0] = 'X'; //문자열 변경 안됨
	printf("%s %s %s \n", str, str1, str2);

}

 

str 배열과 변수의 차이를 한번에 보여주는 코드

1. str배열엔 아무거나 넣을수 있는 것처럼 보이지만 변경이 불가능하다 (그래서 주석친 str1[]부분에서 에러남)

2. 그냥 str변수는 언제나 변경이 가능하다

 

보다시피 str1[0]의 값은 변경이 가능하다. 첫번째 배열의 값을 X로 변경해 Xelcome이 된 것을 볼 수 있다

 

자료형 뒤에 *를 붙이면 포인터 변수란걸 알려주는거임 

 

#include <stdio.h>

void showArray(int arr[], int len) {
	int i;
	for (i = 0; i < len; i++) {
		printf("%d ", arr[i]);
	}
	printf("  \n");
}

int main(){

	int arr1[3] = { 1,2,3 };
	int arr2[5] = { 4,5,6,7,8 };

	showArray(arr1, sizeof(arr1) / sizeof(int));
	showArray(arr2, sizeof(arr2) / sizeof(int));
}

728x90

+ Recent posts