• 2022. 5. 14.

    by. 데브촙

    반응형

    ptr *ptr 의 차이점

    ptr = : 포인터 변수의 값(가리키는 대상의 주소)이 변경

    *ptr = : 포인터가 가리키는 대상의 값이 변경

     

    ptr = 형태는 포인터 변수에 주소를 저장한다

    포인터 변수에 저장된 주소는 포인터가 가리키는 대상 메모리의 시작 주소를 의미

     

    *ptr = 형태는 포인터가 가리키는 대상에 값을 저장한다

    포인터가 가리키는 대상의 값을 변경할 때는 ptr 변수 앞에 *(번지 지정) 연산자를 추가하여 *ptr = 과 같이 사용

    short *ptr;
    ptr = (short *)0x0000006C; //포인터 변수 ptr에 주소를 직접 대입
    *ptr = 0x0412;		// 0x0000006C 번지에 0x0412 값을 대입 , 포인터가 가리키는 대상에 값을 저장

     

    다른 함수에 선언된 지역 변수 사용하기

    short birthday;		// short형 변수 birthday 선언
    short *ptr;		// 포인터가 가리키는 대상의 크기가 2바이트인 변수를 선언
    ptr = &birthday;	// birthday 변수의 주소를 ptr 변수에 대입
    *ptr = 1042;		// ptr에 저장된 주소에 가서 값 1042를 대입

    - 포인터를 사용하여 간접 주소 방식으로 값을 대입하는 이유?

    - 모든 변수가 같은 함수에 선언되는 것은 아니기 때문에

    - 일반 변수는 다른 함수에 있는 변수 사용 불가

    - 포인터 변수는 다른 함수에 선언된 변수의 값을 읽거나 변경 가능

     

    직접 주소 지정 방식으로 다른 함수에 선언한 변수 사용하기

    // A타입 – 다른 함수의 변수 사용 시 오류
    #include <stdio.h>
    void Test()
    {
    	short a = 0; 
    	a = value;	// 오류 발생! 
    }
    
    void main()
    {
    	short value = 5;
    	Test();
    }
    // B타입 – 매개변수로 다른 함수의 변수 값 받기
    #include <stdio.h>
    void Test(short value)
    {
    	short a = 0; 
    	a = value;	// a = 5
    }
    
    void main()
    {
    	short value = 5;
    	Test(value);
    }

     

    간접 주소 지정 방식(포인터)으로 다른 함수에 선언한 변수 사용하기

    // B타입 – 매개변수로 다른 함수의 변수 값 받기
    #include <stdio.h>
    void Test(short value)
    {
    	short a = 0; 
    	a = value;	// a = 5
    	data = 3;	// 오류 발생!
    }
    
    void main()
    {
    	short data = 5;
    	Test(data);
    }
    // C타입 – 매개변수로 다른 함수의 변수주소 받기
    #include <stdio.h>
    void Test(short *ptr)
    {
    	short a = 0; 
    	a = *ptr;	// a = data
    	*ptr = 3;	
    }
    
    void main()
    {
    	short data = 5;
    	Test(&data);
    }

     

    startend값 서로 바꾸기 (swap)

    int start = 96; end = 5;
    int temp;
    if (start > end)
    {
    	temp = end;
    	end = start;
    	start = temp;
    }

     

    직접 주소 지정 방식으로 변수 값 교환하기

    #include <stdio.h>
    // temp 변수를 이용하여 a와 b값을 서로 바꾸는 함수
    void Swap(int a, int b)
    {
    	int temp = a;
    	a = b;
    	b = temp;
    }
    
    void main()
    {
    	int start = 96, end = 5;
    	printf(“before : start = %d, end = %d\n”, start, end);
    	if(start > end) 
    	{
    		Swap(start, end) // 두 변수값을 서로 바꾸기 위해 Swap 함수 호출
    	}
    	printf(“after = start = %d, end = %d\n”, start, end);
    }

    간접 주소 지정 방식(포인터))으로 변수 값 교환하기

    #include <stdio.h>
    // temp 변수를 이용하여 a와 b값을 서로 바꾸는 함수
    void Swap(int *pa, int *pb)
    {
    	int temp = *pa;	// *pa(start) = 96, *pb(end) = 5
    	*pa = *pb;	// *pa(start) = 5, *pb(end) = 5
    	*pb = temp;	// *pa(start) = 5, *pb(end) = 96
    }
    
    void main()
    {
    	int start = 96, end = 5;
    	printf(“before : start = %d, end = %d\n”, start, end);
    	if(start > end) 
    	{
    		Swap(&start, &end) // start와 end 서로 바꾸기 위해 Swap 호출
    	}
    	printf(“after = start = %d, end = %d\n”, start, end);
    }

    반응형

    'C' 카테고리의 다른 글

    포인터와 const 키워드  (0) 2022.05.15
    포인터(Pointer) -1  (0) 2022.05.13
    운영체제의 메모리 관리 방식  (0) 2022.05.12