문자열은 문자배열이다.
문자열의 표현에는 두 가지 방법이 있다.
첫 번째는
char str1[ ] = 'My String'; |
으로 str1이라는 문자배열을 만들어서
0번째에는 M, 1번째에는 y, 2번째에는 공백,
9번째에는 g, 마지막으로 10번째에 널문자가 붙는 방식이다.
이 방법이 쉬워서 대부분 이렇게 쓴다. 90%정도
두 번째는
char * str2 = "Your String"; |
으로 Your String\0이라는 문자열을 같이 묶어서 자동으로 할당하고
이 주소를 포인터 변수 str2에 넣는다.
이 str2는 문자들이 있는 주소이므로 문자 포인터로 선언한다.
이 방법은 10%정도 쓴다. 가끔 쓴다는 뜻
위는 의미가 있는 문장이다.
str이 자동으로 할당된 문자열을 변경한다.
위는 의미가 없는 문장이다.
str이 문자열의 주소 값을 저장하기 때문에
여기에 다른 문자열을 넣어도 의미가 없다.
예제
str2 = "Our String"은 가리키는 대상을 변경된다.
str1[0]은 0번째에 있는 문자를 X로 변경이 가능하다.
str2[0]은 변경이 불가능하다.
str2에는 묶여 있는 문자열에 있기때문에 0번째 변경이 불가능하다.
정리하면 변수 성향의 str1에 저장된 문자열은 문자 한 개 변경이 가능하지만,
상수 성향의 str2에 저장된 문자열(묶여있는 포인터)은 문자 한 개씩 변경이 불가능하다.
포인터 배열
// 포인터 배열
int * arr1[20]; // 길이가 20인 int형 포인터 배열 arr1
double * arr2[30]; // 길이가 30인 double형 포인터 배열 arr2
arr의 배열에 숫자를 가리키는 포인터 주소가 있다.
&num이기 때문.
arr[0]은 num1의 주소가 있다.
*를 붙이면 num1의 주소에 있는 숫자를 들고온다.
strArr라는 배열에 Simple의 주소, String의 주소, Array의 주소가 있다.
Simple, String 등처럼 묶여있는게 포인터라고 하고,
그 주소들이 배열에 있으면 포인터 배열이라고 한다.
사용자가 입력한 문장을 컴파일러는 대략 이렇게 받아들인다.
주소 값은 임의로 정함.
'공부 > C언어' 카테고리의 다른 글
(C 예제) 함수의 인자로 배열 전달 (0) | 2020.06.27 |
---|---|
(C) Call-by-value와 Call-by-reference/scanf에서 &붙이는 이유 (0) | 2020.06.27 |
(C 예제) 포인터와 배열 (0) | 2020.06.27 |
(C 예제) 포인터 정리 및 예제 (0) | 2020.06.26 |
(C 예제) 배열 예제(암호 전달/크기 순으로 정렬/절대값 순으로 정렬) (0) | 2020.06.26 |