티스토리 뷰

C

[c] 포인터

tonirr 2021. 4. 21. 00:42
  • 포인터변수의 선언
    • 형식: 자료형 *포인터변수명;
    • 사용 예: 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에 저장된다)
  • 포인터변수의 참조
    • 포인터변수의 참조 => &, * 연산자 사용
      • 예 1) int *p, i=4; *p=i;
        • 포인터변수 p가 기억공간 내 몇 번지를 가르키는지 알 수 없음
      • 예 2) int *p, i=4; *p=5;
        • 포인터변수 p가 기억공간 내 몇 번지를 가르키는지 알 수 없음
    • 포인터변수의 올바른 참조 방법
      •  예 3) int *p i=4; p=&i; *p=10;
    • 포인터변수의 참조 예
#include <stdio.h>
void main() {
	int *p, i=3, j;
    p=&i; // 포인터변수 p는 i의 주소를 가리킴
    j=*p; // 포인터변수 p가 가리키는 번지의 내용을 변수 j에 대입
    j++;  // 변수 j의 값을 1증가
    print("*p = %d\n", *p); // *p = 3
    print(" p = %x\n", p);  // p = fff4
    print(" j = %d\n", j);  // j = 4
}

 

  • void형 포인터
    • 형식: void * 포인터명;
    • 의미
      • 프로그램 실행시에 자료형이 결정되는 경우에 사용
      • 저장하기 전에 명시적 형변환이 필요
    • void형 포인터의 사용 예
#include <stdio.h>
void main(){
	int a = 100;
    char b = 'b';
    void *p = NULL;	// void형 포인터를 선언한 후 초기화
    p = (int*)&a;	// void형 포인터 p에 int형 변수 a의 주소를 명시적 형변환을 이용하여 대입
    printf("*p = %d\n", *(int*)p);	// *p = 100
    p = (char*)&b;	// void형 포인터 p에 char형 변수 b의 주소를 명시적 형변환을 이용하여 대입
    printf("*p = %c\n", *(char*)p); // *p = b
}

 

  • 일반 변수와 포인터 변수의 비교
  일반 변수   포인터 변수  
선언 int a; 정수형 변수 a선언 int *a; 포인터변수 a를 정수형으로 선언
값 할당 a = 100 변수 a에 100 할당 *a = 100; a 주소에 100 할당
주소참조 &a 변수 a의 주소 a a 자체가 주소
주소연산 연산 불가능   a--; 포인터를 1 감소

 

  • 포인터 연산
    • 포인터변수에 +,-,++,-- 연산자를 사용하는 연산
      •  int a[10], *p, *q;
        • p=&a[2]
        • q=p+3 -> q=&a[5]
        • p=p+6 -> p=&a[8]
      • int a[10], *p, *q;
        • p=&a[7]
        • q=p-3 -> q=&a[4]
        • p=p-5 -> p=&a[2]

'C' 카테고리의 다른 글

[C] 구조체  (0) 2021.04.30
[C] 포인터와 배열  (0) 2021.04.27
[C] 배열  (0) 2021.04.14
[C] 입.출력 함수와 연산자  (0) 2021.03.25
[C] 자료형과 선행처리기  (0) 2021.03.19
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함