상수 포인터 int * const p
int * const p
포인터 자체가 상수화 된다.
주소는 변경이 불가능하고, 가리키는 곳의 값은 역참조로 변경이 가능
상수 지시 포인터 const int *p
포인터가 지시하는 곳의 값을 상수화 시킨다
주소는 변경이 가능하지만, 가리키는 곳의 값은 역참조로 변경이 안된다.
char *name = "홍길동"
*name='a'; 오류
상수 지시 상수 포인터 const int * const p
포인터 변수와 가리키는 곳은 상수화
주소와 가리키는 곳 모두 변경이 불가능
포인터 상수 ( 배열포인터 ) int arr[5]
배열 포인터라고도 부르며 상수 포인터와 비슷한 의미
배열명만 포인터 상수라 부른다
일반 포인터의 경우 4바이트에 메모리를 가지지만
배열의 경우 메모리를 가지고 있지 않고,
찾아가기 위해 존재하는 상징적인 포인터
arr = &num <= 에러존재
배열명의 의미
포인터 상수이기 때문에 l-value에 위치 불가능
일반 포인터와 다르게 메모리 공간을 따로 미할당
배열의 첫번째 요소의 주소를 상직적으로 표현
l-value에 위치하지만 않으면 일반포인터의 모든 연산 수행 가능
배열포인터라 불림
배열로 선언된 지역의 메모리 공간을 대표하는 상징 (모배열)
포인터 배열과 배열 포인터
포인터 배열
각각의 요소가 포인터로 이루어진 배열
int *arr[5]
배열 포인터
int형 타입이 5개로 이루어진 배열을 지시하는 포인터
int (*arr)[5]
문자열
문자열? NULL(숫자 0, '\0') 으로 끝나는 char 타입의 데이터 집합
문자배열 : char name[5]={'a','b','c','d','e'}
| 'a' | 'b' | 'c' | 'd' | 'e' |
문자열 : char name[5]="abcde"
| 'a' | 'b' | 'c' | 'd' | 'e' | '\0' |
위 같은 경우 문자열은 끝에 NULL('\0') 문자가 삽입
문자열 상수와 문자열
문자열 상수인 char *name = "abcd" 인 경우
name이라는 이름을 가진 하나의 포인터가 "abcd"라는 문자열 상수를 가리키게 된다
따라서 상수를 참조하게 되므로 문자열 수정이 불가능
문자열인 char name[5]="abcd"인 경우
메모리를 직접 할당한 문자열. 즉, 배열참조형식 이므로 문자열수정이 가능
문자열 함수
strlen : NULL을 제외한 길이를 구하는 함수
원형 : size_t strlen( const char *str )
- str에서 NULL을 제외한 길이를 구하는 함수
strcpy : 문자열 복사 함수
원형 : char *strcpy( char* dest , const char *src )
- dest에 src를 복사하는 함수
strcat : 문자열 결합 함수
원형 : char *strcat( char* dest , const char *src )
- dest와 src를 결합하는 함수
strcmp
원형 : int strcmp( const char *dest, const char *src )
- dest와 src를 비교
이외에 여러가지지가 있으나 위에 4가지가 많이 쓰인다.
포인터 배열과 배열 포인터의 차이를 알고 포인터를 상수화하는 방법을 알아보았다
포인터 배열 말 그대로 포인터로 이루어진 배열이고 배열 포인터는 배열을 가리키는 포인터
상수 지시 포인터와 상수 포인터를 정확히 알고 쓰자!!
출처 : soen.kr / 학원