상수 포인터 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 / 학원



'언어 > C' 카테고리의 다른 글

배열  (0) 2016.03.25
표준함수  (0) 2016.03.19
기억부류  (0) 2016.03.19
함수와 프로시저  (0) 2016.03.18
연산자  (0) 2016.03.14

+ Recent posts