예제가있는 C 프로그래밍의 포인터
포인터는 다른 변수의 주소를 저장하는 변수입니다. 특정 유형의 값을 보유하는 다른 변수와 달리 포인터는 변수의 주소를 보유합니다. 예를 들어, 정수 변수는 정수 값을 보유 (또는 저장한다고 말할 수 있음)하지만 정수 포인터는 정수 변수의 주소를 보유합니다. 이 가이드에서는 예제를 통해 C 프로그래밍의 포인터에 대해 설명합니다.
C의 포인터에 대해 논의하기 전에 변수 주소가 의미하는 바를 이해하는 간단한 예제를 살펴 보겠습니다.
포인터없이 변수의 주소에 접근하는 방법을 이해하는 간단한 예?
이 프로그램에는 int 유형의 변수 num이 있습니다. num의 값은 10이고이 값은 메모리 어딘가에 저장되어야합니다. 해당 변수의 값을 보유하는 각 변수에 대해 메모리 공간이 할당되며이 메모리 공간에는 주소가 있습니다. 예를 들어 우리는 집에 살고 있고 우리 집에는 다른 사람들이 우리 집을 찾는 데 도움이되는 주소가 있습니다. 변수 값이 메모리 주소에 저장되는 것과 같은 방식으로 C 프로그램이 필요할 때 해당 값을 찾는 데 도움이됩니다.
따라서 변수 num에 할당 된 주소가 0x7fff5694dc58
는 num에 할당 할 값이 0x7fff5694dc58
위치에 저장되어야 함을 의미합니다. 아래 다이어그램을 참조하세요.
출력 :
Value of variable num is: 10Address of variable num is: 0x7fff5694dc58
C에서 포인터의 간단한 예
이 프로그램은 포인터가 선언되고 사용되는 방법을 보여줍니다. 포인터로 할 수있는 몇 가지 다른 작업이 있습니다.이 가이드의 뒷부분에서 설명합니다. 지금은 포인터를 변수 주소에 연결하는 방법 만 알면됩니다.
중요한 점은 다음과 같습니다. 포인터의 데이터 유형 변수가 일치해야합니다. int 포인터는 int 변수의 주소를 보유 할 수 있습니다. 유사하게 float 데이터 유형으로 선언 된 포인터는 float 변수의 주소를 보유 할 수 있습니다. 아래 예에서 포인터와 변수는 모두 int 유형입니다.
출력 :
Address of variable num is: 0x7fff5694dc58
C 포인터 – 포인터와 함께 사용되는 연산자
C에서 포인터와 함께 사용되는 연산자 & 및 *에 대해 설명합니다.
“Address of”(&) 연산자
우리는 이미 앰퍼샌드를 사용하여 변수의 주소를 표시 할 수있는 첫 번째 예에서 보았습니다. 저는 & num을 사용하여 변수 num의 주소에 액세스했습니다. & 연산자는 “Address of”연산자라고도합니다.
printf("Address of var is: %p", &num);
참고 : % p는 주소를 16 진수 형식으로 표시하는 데 사용되는 형식 지정자입니다.
이제 가져 오는 방법을 알았습니다. 변수의 주소이지만 다른 변수에 해당 주소를 저장하는 방법은 무엇입니까? 여기에 포인터가 등장합니다. 이 가이드의 시작 부분에서 언급했듯이 C 프로그래밍의 포인터는 다른 변수의 주소를 유지하는 데 사용됩니다.
포인터는 다른 변수와 동일하지만 주요 차이점은 다른 변수의 주소를 저장하는 것이 아니라 저장한다는 것입니다. 값.
“Value at Address”(*) 연산자
* 연산자는 Value at 주소 연산자라고도합니다.
포인터 선언 방법 ?
위는 포인터 선언의 몇 가지 예입니다. 정수 변수의 주소를 저장할 포인터가 필요하면 포인터의 데이터 유형은 int 여야합니다. 다른 데이터 유형도 마찬가지입니다.
* 연산자를 사용하여 포인터를 통해 변수 값에 액세스 할 수 있습니다.
예 :
double a = 10;double *p;p = &a;
* p 변수 a의 값을 제공합니다. 다음 명령문은 10을 출력으로 표시합니다.
printf("%d", *p);
비슷하게 다음과 같이 * pointer에 값을 할당하는 경우 :
*p = 200;
v 값을 변경합니다. ariable a. 위의 문은 a의 값을 10에서 200으로 변경합니다.
& 및 *
출력의 사용을 보여주는 포인터의 예 :
Value of variable var is: 10Value of variable var is: 10Address of variable var is: 0x7fff5ed98c4cAddress of variable var is: 0x7fff5ed98c4cAddress of pointer p is: 0x7fff5ed98c50
더 잘 이해하기 위해 몇 가지 예를 더 살펴 보겠습니다. br> char 변수 ch와 ch의 주소를 보유하는 포인터 ptr이 있다고 가정하겠습니다.
char ch="a";char *ptr;
ch 값 읽기
printf("Value of ch: %c", ch);orprintf("Value of ch: %c", *ptr);
ch 값 변경
ch = "b";or*ptr = "b";
위 코드는 a값을 b .
다음 C 프로그램의 출력을 추측 할 수 있습니까?
출력 :
Address of var is: 0x7fff5d027c58Address of var is: 0x7fff5d027c58Value of var is: 10Value of var is: 10Value of var is: 10Value of pointer p is: 0x7fff5d027c58Address of pointer p is: 0x7fff5d027c50
More Topics 포인터에 대한 포인터
1) 포인터에 대한 포인터 – 포인터는 다른 포인터를 가리킬 수 있습니다 (즉, 다른 포인터의 주소를 저장할 수 있음을 의미합니다). 이러한 포인터를 이중 포인터 또는 포인터에 대한 포인터라고합니다.
2) 함수에 대한 포인터 전달 – 포인터를 함수에 대한 인수로 전달할 수도 있습니다.이 기능을 사용하면 함수를 참조로 호출 할 수있을뿐만 아니라 호출하는 동안 함수에 배열을 전달할 수 있습니다.
3) 함수 포인터 – 함수 포인터는 다른 포인터와 마찬가지로 함수의 주소를 저장하는 데 사용됩니다. 함수 포인터는 C 프로그램에서 함수를 호출하는 데 사용할 수도 있습니다.