728x90
반응형
포인터
-> 변수의 일종
- 변수 : 특정 데이터 값을 가지고 있음
- 포인터: 특정 데이터가 저장된 기억장소의 주소 값을 가지고 있음
\ ** 포인터는 기억공간을 변수명이 아닌 주소로 접근하기 위해 사용
일반적인 변수의 기억공간 표현
- 변수는 변수 선언에 의해 기억공간 할당
- 할당된 기억공간에 대입된 데이터가 저장
- 할당된 기억공간은 주소가 부여되어 있다
주소를 이용하여 변수와 같은 작업 가능
-> 주소 값(포인터 값)을 다룰 수 있는 변수가 필요하다
- 포인터 변수: 변수의 주소 값을 갖는 변수
- 예 : &변수명 or &배열이름 으로 주소 확인 가능
포인터변수의 선언
- 형식 : 자료형 *변수명
- 사용 예 : int *p;
- 기능 : 변수 p는 정수형 포인터 변수로 자료를 갖는 변수의 주소를 갖는다
- *p : 해당 주소에 값을 가지고 있다
- p : 포인터 변수로 자료의 주소를 가지고 있다
포인터변수의 참조
- &, * 연산자 사용
- 포인터변수에는 상수 값을 사용할 수 없다
- &를 사용해서 주소 값을 포인터변수로 전달해야함
포인터변수 참조 예
#include <stdio.h>
int main(void) {
int a=3, b;
int *p;
p=&a;
b=*p;
b++;
printf("\*p = %d\n" ,*p);
printf("p = %x\n", p);
printf("b = %d\n", b);
}
void 형 포인터
- 형식 : void *포인터명;
- 의미 : 프로그램 실행시에 자료형이 결정되는 경우 사용
** 저장 전 명시적 형변환이 필요하다 -> *(int*)p 등과 같이 사용
#include <stdio.h>
int main(void) {
int a = 3;
char b ='b';
void *p;
p=&a;
printf("*p = %d\n" ,*(int*)p);
p=&b;
printf("*p = %c\n", *(char*)p);
}
일반 변수와 포인터 변수의 비교
포인터의 연산
포인터와 기억공간의 대응관계
포인터 변수에 연산 +. -, ++, -- 연산
-> 동일 배열을 가리키는 경우 뺄셈으로 거리 차이를 구할 수 있음
** 두 포인터간 연산은 거리의 차이를 구하는 것이므로 덧셈은 되지 않는다
** 개별 포인터에 +연산을 하면 다음 주소값을 가리키게 된다
-> p+1 : a[7] , q+1 : a[3]
반응형
'프로그래밍 언어 > C' 카테고리의 다른 글
C언어 - 11. 구조체와 공용체 (0) | 2021.03.21 |
---|---|
C언어 - 10. 배열과 포인터 (3) (0) | 2021.03.17 |
C언어 - 8. 배열과 포인터(1) (0) | 2021.03.16 |
C언어 - 7. 함수와 기억클래스(2) (0) | 2021.03.14 |
C언어 - 6. 함수와 기억클래스(1) (0) | 2021.03.14 |
댓글