1. 포인터
- C언어에서 변수의 주소를 저장, 사용할 때 사용하는 변수
- 포인터 변수를 선언 할 때는 자료의 형을 먼저 쓰고 변수명 앞에 간접 연산자 *을 붙인다
(int *a;) - 포인터 변수에 주소를 저장하기 위해 변수의 주소를 알아낼 때는 변수의 앞에 번지 연산자 &를 붙인다.
(a = &b;) - b의 주소값을 a에 넣는다. - 실행문에서 포인터 변수에 간접 연산자 *을 붙이면 해당 포인터 변수가 가리키는 곳의 값
(c = *a;) a의 주소에 담긴 변수 또는 배열의 값을 c에 넣는다. - 포인터 변수는 필요에 의해 동적으로 할당되는 메모리 영역인 힙 영역에 접근하는 동적 변수
- 복사본을 만들지 않고 그 값을 가리키는 주소만 알려줌으로써 효율적인 메모리 사용이나 단축된 처리시간 장점
2. 포인터 변수의 용도
- 연결된 자료 구조를 구성하기 위해 사용
- 동적으로 할당된 자료 구조를 지정하기 위해
- 배열을 인수로 전달하기 위해
- 문자열을 표현하기 위해
- 커다란 배열에서 요소를 효율적으로 저장하기 위해
- 메모리에 직접 접근하기 위해
&a = 주소, *b = 값
3. 포인터와 배열
- 배열을 포인터 변수에 저장한 후 포인터를 이용해 배열의 요소에 접근
- 배열 위치를 나타내는 첨자를 생략하고 배열의 대표명만 지정하면 배열의 첫 번째 요소의 주소를 지정하는 것과 같음
ex) b = a 는 a[0]만 저장됨 - 배열 요소에 대한 주소를 지정할 때는 일반 변수와 동일하게 & 연산자를 사용
ex) b = &a[0] - *(a+0) = a[0]
4. 2차 배열
- int arr[2][3] = {1,2,3,4,5,6}일 때
1 | 2 | 3 |
4 | 5 | 6 |
- *(p[0]+1) + *(p[1]+2) = [0][1] + [1][2] = 2 + 6 = 8
- *(*(p+1)+0) + *(*(p+1)+1) = [1][0] + [1][1] = 4 + 5 = 9
기출문제
#include
int main() {
char *p = "KOREA";
printf("%s\n", p);
printf("%s\n", p + 3);
printf("%c\n", *p);
printf("%c\n", *(p + 3));
printf("%c\n", *p + 2);
return 0;
}
정답
KOREA
EA
K
E
M (아스키코드로 K의 두개 뒤 글자)
'정보처리기사 준비 > 프로그래밍 파트 정리' 카테고리의 다른 글
[프로그래밍] 라이브러리, 예외처리, 프로토타입, 프레임워크, 재사용 (0) | 2024.04.16 |
---|---|
[프로그래밍] 구조체 (0) | 2024.04.12 |
[프로그래밍] 데이터 입출력, 제어문, 반복문 (0) | 2024.04.11 |
[프로그래밍] 데이터 타입, 변수 (0) | 2024.04.11 |
[프로그래밍] 생성자, 접근제어자, 스크립트 언어, 선언형 언어 (0) | 2024.04.11 |