• dmchoi
  • 포인터

    2021년 03월 25일

    포인터 변수

    -구체적으로 컴퓨터 메모리에 있는 자료 값, 변수, 함수의 주소를 가지는 변수

    -다른 객체를 참조하기 위해 사용함

    -변수의 크기에 따라 차지하는 메모리 공간이 다르다.

    포인터를 사용하는 이유

    일반적인 변수를 통해서도 메모리에 값을 저장하고 불러올 수 있지만 

    포인터를 사용하면 일반적인 방식에서 허용하지 않는 접근이 가능해져 매우 편리하다.

    ex) 도서관에서 찾고자 하는 책의 위치를 저장하고 있는 인덱스를 먼저 접근한 후 실제 책이 있는 곳에 가서 책을 찾으면 효율적이다.

    책 목록 - 데이터의 주소(포인터변수)

    주소연산자 &

    변수의 주소를 반환하는 연산자 &

    메모리상의 주소값은 실행할 때마다 바뀔 수 있다.

    #include <stdio.h>
    
    int main(void) {
    	int a = 3;
    	printf("a의 값 : %d\n", a);
    	printf("a의 주소 : %p\n", &a);
    }
    
    // 결과
    // a의 값 : 3
    // a의 주소 : 00E0F7D4

    포인터 선언

    -포인터 변수 : 컴퓨터 메모리 상의 주소를 저장하는 자료형

    int myInt 

    -> myInt : 정수형 자료값을 저장하는 메모리 공간의 이름

    int *myPointer 

    -> myPointer : 정수형 자료값을 가지는 변수의 주소를 가지는 변수

    #include <stdio.h>
    
    int main(void) {
    	int* myPointer;
    	int myVar = 10;
    
    	myPointer = &myVar; //myPointer가 myVar변수의 주소 값을 참조
    	printf("*myPointer = %d\n", *myPointer);
    	printf("myPointer = %p\n", myPointer);
    
    	return 0;
    }
    
    // 결과
    // *myPointer = 10
    // myPointer = 012FFA84

    포인터 변수 myPointer는 정수 값 10을 가진 myVar라는 변수를 가리킨다.

    또는 myPointer는 myVar 변수를 참조한다.

    간접 참조 연산자 *

    포인터 변수가 가리키는 값을 가져오는 연산자

    #include <stdio.h>
    
    int main(void) {
    	int* myPointer;
    	int myVar = 10;
    
    	printf("myVar = %d\n", myVar);
    	myPointer = &myVar;
    
    	*myPointer = 20;
    	printf("myVar = %d\n", myVar);
    
    	return 0;
    }
    
    //결과
    myVar = 10
    myVar = 20

    *myPointer : myPointer라는 포인트 변수가 가지고 있는 값

    Tags
      © 2021 dmchoi, Powered By Gatsby.