C 포인터

포인터는 C 및 C ++ 프로그래밍의 강력한 기능입니다. 포인터를 배우기 전에 C 프로그래밍의 주소에 대해 알아 보겠습니다.

C의 주소

프로그램에 변수 var가있는 경우 &var는 메모리의 주소를 알려줍니다.

scanf() 함수를 사용하는 동안 주소를 여러 번 사용했습니다.

여기에서 사용자가 입력 한 값은 var 변수의 주소에 저장됩니다. 실제 예를 들어 보겠습니다.

출력

var: 5 address of var: 2686778

참고 : 위 코드를 실행하면 다른 주소를 얻을 수 있습니다.

C 포인터

포인터 (포인터 변수)는 값이 아닌 주소를 저장하는 데 사용되는 특수 변수입니다.

포인터 구문

포인터를 선언하는 방법은 다음과 같습니다.

여기에서 int 유형의 포인터 p를 선언했습니다.

당신 이러한 방식으로 포인터를 선언 할 수도 있습니다.

포인터 선언의 또 다른 예를 살펴 보겠습니다.

여기서는 포인터 p1과 일반 변수 p2를 선언했습니다.

포인터에 주소 할당

예를 들어 보겠습니다.

여기서 5는 c 변수에 할당됩니다. 그리고 c의 주소는 pc 포인터에 할당됩니다.

포인터가 가리키는 사물의 값 가져 오기

포인터가 가리키는 사물의 값을 가져 오기 위해 * 연산자. 예 :

여기서 c의 주소는 pc 포인터에 할당됩니다. 해당 주소에 저장된 값을 가져 오기 위해 * pc를 사용했습니다.

참고 : 위의 예에서 pc는 *pc가 아니라 포인터입니다. *pc = &c와 같은 작업을 할 수 없으며해서는 안됩니다.

그런데 *는 역 참조 연산자 ( 포인터로 작업 할 때). 포인터에서 작동하고 해당 포인터에 저장된 값을 제공합니다.

포인터가 가리키는 값 변경

예를 들어 보겠습니다.

c의 주소를 pc 포인터에 할당했습니다.

그런 다음 c의 값을 1로 변경했습니다. pc와 c의 주소 이후 *pc는 1을 제공합니다.

다른 예를 들어 보겠습니다.

c의 주소를 pc 포인터에 할당했습니다.

그런 다음 *pc = 1;<을 사용하여 *pc를 1로 변경했습니다. / div>. pc와 c의 주소가 같으므로 c는 1이됩니다.

한 가지 더 예를 들어 보겠습니다.

처음에는 c의 주소는 pc = &c;를 사용하여 pc 포인터에 할당됩니다. c는 5이므로 *pc는 5를 제공합니다.

그런 다음 d의 주소는 pc = &d;를 사용하여 pc 포인터에 할당됩니다. d는 -15이므로 *pc는 -15를 제공합니다. .

예 : 포인터 작업

실제 예를 들어 보겠습니다.

출력

Address of c: 2686784Value of c: 22Address of pointer pc: 2686784Content of pointer pc: 22Address of pointer pc: 2686784Content of pointer pc: 11Address of c: 2686784Value of c: 2

프로그램 설명

  1. int* pc, c;

    여기 , 포인터 pc와 일반 변수 c (둘 다 int 유형)가 생성됩니다.
    pc와 c는 초기에 초기화되지 않았으므로 포인터 pc는 주소 없음 또는 임의의 주소. 그리고 변수 c에는 주소가 있지만 임의의 가비지 값을 포함합니다.
  2. c = 22;

    이것은 변수 c에 22를 할당합니다. 즉, 22는 변수 c의 메모리 위치에 저장됩니다.
  3. pc = &c;

    변수 c의 주소를 포인터 pc에 할당합니다.
  4. c = 11;

    11을 변수 c에 할당합니다.
  5. *pc = 2;

    이것은 포인터 pc가 가리키는 메모리 위치의 값을 2로 변경합니다.

포인터로 작업 할 때 흔히 발생하는 실수

포인터 pc가 c의 주소를 가리 킵니다. 그런 다음

다음은 포인터 구문 초보자가 자주 혼동하는 예입니다.

int *p = &c;를 사용하십니까?

그 이유는

가 >

두 경우 모두 포인터 p (*p) 및 &c 할당.

이 혼동을 피하기 위해 다음과 같은 문을 사용할 수 있습니다.

이제 포인터가 무엇인지 알았으니 포인터는 다음 튜토리얼에서 배열과 관련이 있습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다