[1]

ucf·2020년 9월 30일
0

알고리즘&자료구조

목록 보기
2/13

1. 포인터의 기본사용

: 객체(변수) 또는 함수를 가르키는것

사용방법

int *p;
int n;
p = &n; //n의 주소를 p에 대입
*p = 999; //p가 가르키는 곳에 999를 대입

배열의 이름은 그 배열의 첫번째 요소에 대한 포인터.
따라서 위의 예제에서 3번째줄은 p=&n[0]과 같음

포인터p가 배열의 요소 n을 가르킬 때
*(p+i) = n[i]

이처럼 포인터가 배열의 첫번째 요소를 가르키는경우 배열처럼 사용가능.

2. 공백 포인터

공백 포인터는 객체 포인터, 함수 포인터와는 다른 또다른 포인터이다. 정수 값 0은 모든 포인터형으로 형 변환이 가능하고 그 결과는 NULL 포인터이다. 공백 포인터를 나타내는것이 공백 포인터 상수라고 부르는 매크로 NULL 이다. NULL의 정의는 값 0을 갖는 모든 정수, 상수 또는 상수식을 void* 으로 형 변환한 식이다.

defind NULL 0
defind NULL(void *)0

void 포인터는 모든 형의 객체를 가르킬 수 있다. 반대로 모든 자료형의 포인터 값을 void 포인터에 대입할 수 있다.

int a=10;
char b='b';

void *v_p;
int *i_p=&a;
char *c_p=&b;

//에러가 발생하지 않음
v_p = i_p; 
v_p = c_p;
//반대도 마찬가지
i_p = v_p;
c_p = v_p;

단, void 포인터는 자료형이 정해져 있지 않기때문에 역참조가 불가능하다.

int a=10;
void *p=&a;
printf("%d",*p);

<error!!>

3. 다중 포인터와 포인터에 주솟값 직접적 주기

(이중 포인터 예시)

int a=10;
int *p1;
int **p2;

p1=&a;
p2=&p1;

위와 같은 방법으로 삼중, 사중 등등 다중 포인터 사용 가능

(포인터에 주솟값 직접 주기)

int *numPtr = 0x00FFCBA;

단, 실제로 존재하는 주솟값에 한해서 가능.

profile
즐기자!

0개의 댓글