* 출처: 코딩도장 34.7 잘못된 포인터 사용
* 출처: 최유경 교수님 C 프로그래밍 포인터 수업자료
▶ 1. 포인터 변수에 직접 값을 입력하는 경우
포인터는 메모리 주소를 저장하는 용도이다.
따라서 값을 직접 저장하면 안 된다.
메모리에서 0x100은 잘못된 주솟값이므로 제대로 실행되지 않는다.
때문에 이 상태에서 numPtr을 역참조하여 메모리 주소에 접근해봐야 에러만 발생한다.
아래와 같은 오류 메시지가 발생한다.
- E0144: "int" 형식의 값을 사용하여 "int *" 형식의 엔터티를 초기화할 수 없습니다.
- C2440: '초기화 중': 'int'에서 'int *'(으)로 변환할 수 없습니다.
※ 정수 계열 형식에서 포인터 형식으로 변환하려면 reinterpret_cast, C 스타일 캐스트 또는 함수 스타일 캐스트가 필요합니다.
그런데 만약 실제로 존재하는 메모리 주소라면 포인터에 직접 저장할 수 있다.
▶ 2. 포인터를 선언만 하고 변수와 연결하지 않는 경우 (& x)
포인터 변수에는 쓰레기 값만 들어있게 되므로 오류가 발생한다.
반드시 어떤 변수에 & (주소 연산자)로 연결한 후 사용하여야 한다.
□ 널(NULL) 포인터
- 주소 값 0을 나타내는 특별한 기호.
- 아무것도 가리키지 않음을 의미
- NULL의 값은 0이므로, 조건문에서 사용하면 거짓에 해당
- 예기지 못한 오류 방지를 위해 포인터 변수를 NULL로 초기화(int *pnum = NULL;)
▶ 3. &(주소연산자)와 *(참조연산자)의 사용 범위
- &(주소연산자): 포인터를 포함한 모든 변수에 사용 가능함
- *(참조 연산자): 포인터 변수에서만 사용 가능 (*num(num이 가리키는 변수)은 정의되지 않음)
▶ 4. 대입(연결) 시 자료형은 일치해야 한다.
- 포인터의 자료형과 연결된 변수의 자료형은 일치해야 한다.
- 서로 다른 자료형의 포인터 간 대입 시, 문법적으로는 경고만 발생하더라도 프로그램 오류의 원인이 된다.
▶ 5. 포인터의 크기
자료형 마다 크기가 다르다.
그러나 포인터의 경우, 포인터의 종류(자료형)에 상관없이 주소를 저장하기 위해 필요한 공간이 동일하다.
포인터의 크기는 시스템에 따라 (32비트 혹은 64비트) 다를 수 있다.
'Algorithm > C프로그래밍' 카테고리의 다른 글
[C언어] 배열 개념: 배열을 선언하고 요소에 접근하기 (0) | 2021.07.02 |
---|---|
[C언어] 배열을 선언할 때 배열의 크기를 생략할 수 있다. (0) | 2021.07.02 |
[C언어] 포인터 개념 (6): 이중 포인터 (0) | 2021.07.02 |
[C언어] 포인터 개념 (5): 범용 포인터인 void 포인터 선언하기 (0) | 2021.07.02 |
[C언어] 포인터 개념 (4): 다양한 자료형의 포인터 선언하기 (0) | 2021.07.02 |