C 언어
이 자습서에서는 포인터에 대해 배웁니다. 포인터가 무엇인지, 어떻게 사용하는지, 예제를 통해 포인터로 작업할 때 직면할 수 있는 일반적인 실수.
포인터는 C 및 C++ 프로그래밍의 강력한 기능입니다. 포인터를 배우기 전에 C 프로그래밍의 주소에 대해 알아보겠습니다.
<시간>
변수 var가 있는 경우 프로그램에서 &var
메모리에 있는 주소를 알려줍니다.
scanf()
을(를) 사용하는 동안 주소를 여러 번 사용했습니다. 기능.
scanf("%d", &var);
여기서 사용자가 입력한 값은 var 주소에 저장됩니다. 변하기 쉬운. 실제 예를 들어 보겠습니다.
#include <stdio.h>
int main()
{
int var = 5;
printf("var: %d\n", var);
// Notice the use of & before var
printf("address of var: %p", &var);
return 0;
}
출력
var: 5 address of var: 2686778
참고: 위의 코드를 실행하면 아마 다른 주소를 받게 될 것입니다.
<시간>포인터(포인터 변수)는 값이 아닌 주소를 저장하는 데 사용되는 특수 변수입니다.
다음은 포인터를 선언하는 방법입니다.
int* p;
여기에서 포인터 p를 선언했습니다. int
중 유형.
이러한 방식으로 포인터를 선언할 수도 있습니다.
int *p1;
int * p2;
<시간> 포인터를 선언하는 또 다른 예를 들어보겠습니다.
int* p1, p2;
여기에서 p1 포인터를 선언했습니다. 및 일반 변수 p2 .
<시간>예를 들어보겠습니다.
int* pc, c;
c = 5;
pc = &c;
여기서 5는 c에 할당됩니다. 변하기 쉬운. 그리고 c의 주소는 pc에 할당됩니다. 포인터.
<시간>
포인터가 가리키는 값을 얻으려면 *
을 사용합니다. 운영자. 예:
int* pc, c;
c = 5;
pc = &c;
printf("%d", *pc); // Output: 5
여기서 c
의 주소는 pc에 할당됩니다. 바늘. 해당 주소에 저장된 값을 가져오기 위해 *pc를 사용했습니다. .
참고: 위의 예에서 pc *pc
이 아닌 포인터입니다. . *pc = &c
과 같은 작업은 할 수 없고 해서는 안 됩니다.;
그건 그렇고, *
역참조 연산자(포인터로 작업할 때)라고 합니다. 포인터에서 작동하고 해당 포인터에 저장된 값을 제공합니다.
예를 들어보겠습니다.
int* pc, c;
c = 5;
pc = &c;
c = 1;
printf("%d", c); // Output: 1
printf("%d", *pc); // Ouptut: 1
c의 주소를 할당했습니다. pc에 포인터.
그런 다음 c의 값을 변경했습니다. 1. pc 이후 및 c의 주소 동일합니다. *pc
1을 제공합니다.
다른 예를 들어보겠습니다.
int* pc, c;
c = 5;
pc = &c;
*pc = 1;
printf("%d", *pc); // Ouptut: 1
printf("%d", c); // Output: 1
c의 주소를 할당했습니다. pc에 포인터.
그런 다음 *pc
을 변경했습니다. *pc = 1;
를 사용하여 1로 . pc 이후 및 c의 주소 동일합니다. c 1과 같습니다.
예를 하나 더 들어보겠습니다.
int* pc, c, d;
c = 5;
d = -15;
pc = &c; printf("%d", *pc); // Output: 5
pc = &d; printf("%d", *pc); // Ouptut: -15
처음에 c의 주소는 pc에 할당됩니다. pc = &c;
를 사용하는 포인터 . c 이후 5, *pc
5를 줍니다.
그런 다음 d의 주소는 pc에 할당됩니다. pc = &d;
을 사용하는 포인터 . d 이후 -15, *pc
-15를 줍니다.
실제 예를 들어보겠습니다.
#include <stdio.h>
int main()
{
int* pc, c;
c = 22;
printf("Address of c: %p\n", &c);
printf("Value of c: %d\n\n", c); // 22
pc = &c;
printf("Address of pointer pc: %p\n", pc);
printf("Content of pointer pc: %d\n\n", *pc); // 22
c = 11;
printf("Address of pointer pc: %p\n", pc);
printf("Content of pointer pc: %d\n\n", *pc); // 11
*pc = 2;
printf("Address of c: %p\n", &c);
printf("Value of c: %d\n\n", c); // 2
return 0;
}
출력
Address of c: 2686784 Value of c: 22 Address of pointer pc: 2686784 Content of pointer pc: 22 Address of pointer pc: 2686784 Content of pointer pc: 11 Address of c: 2686784 Value of c: 2<시간>
프로그램 설명
int* pc, c;
int
유형 , 생성됩니다. c = 22;
pc = &c;
c = 11;
*pc = 2;
포인터 pc를 원한다고 가정해 보겠습니다. c의 주소를 가리키기 위해 . 그럼
int c, *pc;
// pc is address but c is not
pc = c; // Error
// &c is address but *pc is not
*pc = &c; // Error
// both &c and pc are addresses
pc = &c; // Not an error
// both c and *pc values
*pc = c; // Not an error
다음은 포인터 구문 초보자가 종종 혼동하는 예입니다.
#include <stdio.h>
int main() {
int c = 5;
int *p = &c;
printf("%d", *p); // 5
return 0;
}
int *p = &c;
를 사용할 때 오류가 발생하지 않는 이유 ?
그 이유는
int *p = &c;
와 동일합니다.
int *p:
p = &c;
두 경우 모두 p
포인터를 생성합니다. (*p
아님 ) 및 &c
할당 그것에.
이러한 혼란을 피하기 위해 다음과 같은 구문을 사용할 수 있습니다.
int* p = &c;
<시간> 이제 포인터가 무엇인지 알았으니 다음 튜토리얼에서 포인터가 배열과 어떻게 관련되는지 배우게 될 것입니다.
C 언어
포인터는 하나의 값을 반환하도록 제한되는 C 함수에 큰 가능성을 제공합니다. 포인터 매개변수를 사용하면 이제 함수에서 데이터 복사본이 아닌 실제 데이터를 처리할 수 있습니다.변수의 실제 값을 수정하기 위해 호출 문은 함수의 포인터 매개변수에 주소를 전달합니다.여기에서 튜토리얼, 당신은 배울 것입니다- 함수 포인터의 예 배열 매개변수가 있는 함수 배열을 반환하는 함수 함수 포인터 함수 포인터 배열 void 포인터를 사용한 함수 인수로서의 함수 포인터 함수 포인터의 예 예를 들어, 다음 프로그램은 두 값을 2로 교환합
프로그래밍 언어에서 특정 개념은 코딩을 훨씬 쉽게 만듭니다. 예를 들어, void 포인터는 C 프로그래밍 언어의 최종 사용자 입력에서 특정 데이터 유형을 결정합니다. 따라서 C에서 void 포인터에 대해 논의하도록 합니다. 다른 것들과 마찬가지로 void 포인터는 유연성을 위한 관련 기능을 가지고 있습니다. 그러나 코딩할 때 시간을 절약하려면 이동 포인터 함수가 void 포인터입니다. 이 포인터를 사용하면 다른 개체 유형을 동시에 저장하고 검색할 수 있습니다. 계속해서 C의 void 포인터와 관련된 코딩 기술에 대해 모두 배우게