-
반응형
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); }
start와 end값 서로 바꾸기 (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