반응형
변수와 포인터 차이
변수 : 특정 데이터 값을 가지고 있습니다.
포인터 : 특정 데이터가 저장된 기억 장소의 주소 값을 가지고 있습니다.
형식 : 자료형( * )
사용 예 : int *p;
기능 : 변수 p는 포인터 변수로서 정수형의 자료를 갖는 변수의 주소를 갖습니다.
int *p
p : 포인터 변수로서 정수 형 자료가 수록되어 있는 주소를 가지고 있습니다.
*p : 해당 주소에 수록되어 있는 정수 형 자료를 가지고 있습니다.
사용 예
int a, b;
int *p; // 변수 p를 포인터 변수로 선언
a=5000;
p=&a; // 포인터 변수 p에 변수 a의 주소 값을 대입
b=*p // 포인터 변수 p가 가리키는 주소의 내용을 변수 b에 저장
// 즉 a의 값 5000이 b에 저장된다.
// a=5000 b=*p
// p=&a = 5000
// b=5000
다른 예시
int *p, i=4
p=&i; // i의 주소 값 대입
*p=10; // i의 주소 값 10 대입
// i = 10
결과

포인터 연산
두 포인터 간에 덧셈 연산은 안 됩니다. 위치만 바뀌는 개념입니다.
int a[10], *p, *q;
p=&a[7]; // p = a[7]
q=p-3; // q = a[4]
p=p-5; // p = a[2]
포인터 배열 -> 포인터의 집합
포인터가 여러 개 사용될 때 포인터 배열로 선언
포인터 배열 예

포인터 cp에 배열 s의 내용을 참조합니다.
*(cp + i) 출력 해 보면 1 ~ 7 까지 출력하는 것을 볼 수 있습니다.
포인터 배열의 예 2

포인터 point는 [2] 배열 크기를 가지고 있습니다.
각각 [0] Array 배열과 [1] Array2 배열을 담습니다.
*(point[ i ] + j) 출력 해 보면 해당 값을 출력하는 것을 볼 수 있습니다.
*(point[0] + 1), *(point[0] + 2), ...
위 예시는 2차원 배열과 동일하며, 2차원 배열에 비해 기억공간 절약 효과가 있다고 한다.(진짜?)
(포인터 배열은 자료의 크기만큼 기억공간 할당)

반응형