C 프로그래밍의 포인터 : 포인터 란 무엇인가, 유형 및 예

C의 포인터 란?

C의 포인터는 다른 변수의 주소를 저장하는 변수입니다. 포인터를 사용하여 다른 포인터 함수를 참조 할 수도 있습니다. 포인터는 증가 / 감소, 즉 다음 / 이전 메모리 위치를 가리킬 수 있습니다. 포인터의 목적은 메모리 공간을 절약하고 실행 시간을 단축하는 것입니다.

C에서 포인터를 사용하는 방법

int 유형의 변수 v를 선언하면 v는 실제로 값을 저장합니다.

v는 이제 0과 같습니다.

그러나 값을 제외한 각 변수에는 주소 (또는 단순히 메모리에있는 위치)도 있습니다. 주소는 변수 이름 앞에 앰퍼샌드 (&)를 넣어 검색 할 수 있습니다.

화면에 변수 주소를 인쇄하면 다음과 같이 보입니다. 완전히 임의의 숫자처럼 (또한 실행마다 다를 수 있습니다.)

C에서 포인터로 실제로 시도해 봅시다. 예

이 프로그램의 출력은 -480613588입니다.

포인터 란 무엇입니까? 값을 저장하는 대신 포인터가 변수의 주소를 저장합니다.

포인터 변수

Int * y = & v;

변수

POINTER

명명 된 스토리지 / 메모리 주소에 저장된 값

다른 변수의 저장 / 메모리 주소를 가리키는 변수

포인터 선언

변수와 마찬가지로 C 프로그램의 포인터 mming은 프로그램에서 사용하기 전에 선언해야합니다. 포인터는 C “의 명명 규칙을 준수하는 한 원하는 이름을 지정할 수 있습니다. 포인터 선언은 다음과 같은 형식을 갖습니다.

data_type * pointer_variable_name;

여기,

  • data_type은 C 변수 유형의 포인터 기본 유형이며 포인터가 가리키는 변수 유형을 나타냅니다.
  • 별표 (* : 사용 된 동일한 별표) 곱셈의 경우) 간접 연산자 인 포인터를 선언합니다.

이 C 포인터 자습서에서 몇 가지 유효한 포인터 선언을 살펴 보겠습니다.

포인터 초기화

포인터를 선언 한 후 변수 주소를 사용하여 표준 변수처럼 초기화합니다. C 프로그래밍의 포인터가 초기화되지 않고 프로그램에서 사용되는 경우 결과는 예측할 수 없으며 잠재적으로 재앙이 될 수 있습니다.

변수 주소를 얻으려면 주소가 필요한 변수 이름 앞에 앰퍼샌드 (&) 연산자를 사용합니다. 포인터 초기화는 다음 구문으로 수행됩니다.

포인터 구문

 pointer = &variable; 

포인터 그림을위한 간단한 프로그램은 다음과 같습니다.

출력 :

Address stored in a variable p is:60ff08Value stored in a variable p is:10
연산자 의미
* 2 가지 용도로 사용

  1. 포인터 선언
  2. 참조 된 변수의 값을 반환합니다.
& 1 가지 목적으로 만 제공

  • 반품 변수 주소

C의 포인터 유형

다음은 C의 다양한 포인터 유형입니다.

Null 포인터

포인터 선언 중에 null 값을 할당하여 null 포인터를 만들 수 있습니다. 이 방법은 포인터에 할당 된 주소가 없을 때 유용합니다. 널 포인터는 항상 값 0을 포함합니다.

다음 프로그램은 널 포인터 사용을 보여줍니다.

#include <stdio.h>int main(){int *p = NULL; //null pointerprintf("The value inside variable p is:\n%x”,p);return 0;}

출력 :

The value inside variable p is:0

Void 포인터

C 프로그래밍에서 void 포인터는 일반 포인터라고도합니다. 표준 데이터 유형이 없습니다. void 키워드를 사용하여 void 포인터를 만듭니다. 모든 변수의 주소를 저장하는 데 사용할 수 있습니다.

다음 프로그램은 void 포인터의 사용을 보여줍니다.

#include <stdio.h>int main(){void *p = NULL; //void pointerprintf("The size of pointer is:%d\n",sizeof(p));return 0;}

출력 :

The size of pointer is:4

와일드 포인터

포인터가 초기화되지 않은 경우 와일드 포인터라고합니다. 이러한 유형의 C 포인터는 프로그램에서 문제를 일으킬 수있는 알 수없는 메모리 위치를 가리킬 수 있고 프로그램 충돌로 이어질 수 있기 때문에 효율적이지 않습니다. 와일드 포인터로 작업하는 동안 항상주의해야합니다.

다음 프로그램은 와일드 포인터 사용을 보여줍니다.

#include <stdio.h>int main(){int *p; //wild pointerprintf("\n%d",*p);return 0;}

출력

timeout: the monitored command dumped coresh: line 1: 95298 Segmentation fault timeout 10s main

“c”의 다른 유형의 포인터는 다음과 같습니다.

  • 매달린 포인터
  • 복잡한 포인터
  • 포인터 근처
  • 원거리 포인터
  • 거대한 포인터

직접 및 간접 액세스 포인터

C에는 두 가지 동일한 방법이 있습니다. 변수 콘텐츠에 액세스하고 조작하기 위해

  • 직접 액세스 : 변수 이름을 직접 사용
  • 간접 액세스 : 변수에 대한 포인터를 사용합니다.

아래 프로그램의 도움으로 이해합시다

오류없이 프로그램을 컴파일 한 후 결과는 다음과 같습니다.

Direct access, var = 1Indirect access, var = 1The address of var = 4202496The address of var = 4202496Indirect access, var = 48

C의 포인터 연산

포인터 연산은 다음 그림에 요약되어 있습니다.

포인터 연산

우선 순위 작업 (우선 순위)

C 포인터로 작업 할 때 다음 사항을 준수해야합니다. 다음 우선 순위 규칙 :

P 포인터가 X 변수를 가리키면 X를 쓸 수있는 모든 곳에서 * P를 사용할 수 있습니다.

다음 표현식은 동일합니다.

후자의 경우 괄호가 필요합니다. 단항 연산자 * 및 ++는 오른쪽에서 왼쪽으로 평가되므로 괄호없이 포인터 P P가 가리키는 객체가 아니라 증가합니다.

아래 표는 C 포인터를 다룰 때 사용할 수있는 산술 및 기본 연산을 보여줍니다.

작업 설명
할당 int * P1, * P2 P1 = P2; P1과 P2는 동일한 정수 변수를 가리 킵니다.
증가 및 감소 Int * P1; P1 ++; P1–;
오프셋 추가 (상수) 이렇게하면 포인터가 테이블에서 N 개의 요소를 이동할 수 있습니다. 포인터는 변수 유형의 바이트 수의 N 배 증가하거나 감소합니다. P1 + 5;

C 포인터 & 예제가있는 배열

전통적으로 인덱스를 사용하여 배열 요소에 액세스하지만이 메서드는 포인터를 사용하여 제거 할 수 있습니다. 포인터를 사용하면 각 배열 요소에 쉽게 액세스 할 수 있습니다.

출력

12345

포인터에 특정 숫자를 추가하면 포인터 위치가 더하기 연산으로 얻은 값으로 이동합니다. p가 현재 메모리 위치 0을 가리키는 포인터라고 가정합니다. 다음 추가 작업을 수행하면 p + 1이 수행되면 다음과 같은 방식으로 실행됩니다.

포인터 추가 / 증가

p는 현재 1을 더한 후 0 위치를 가리 키므로 값은 1이되며 포인터는 메모리 위치 1을 가리 킵니다.

C 포인터 및 예제가있는 문자열

문자열은 null 문자 “\ 0″으로 끝나는 char 객체의 배열입니다. 포인터를 사용하여 문자열을 조작 할 수 있습니다. C 예제의이 포인터는이 섹션을 설명합니다.

출력

First character is:HNext character is:ePrinting all the characters in a stringHelloGuru99!

문자열을 처리하는 또 다른 방법은 다음과 같은 포인터 배열을 사용하는 것입니다. 프로그램 :

출력 :

Please remember these materials:ironcoppergold

C에서 포인터의 장점

  • 포인터는 액세스에 유용합니다. 메모리 위치.
  • 포인터는 배열 구조의 요소에 액세스하는 효율적인 방법을 제공합니다.
  • 포인터는 할당 해제뿐만 아니라 동적 메모리 할당에도 사용됩니다.
  • 포인터는 연결 목록, 그래프, 트리 등과 같은 복잡한 데이터 구조를 형성하는 데 사용됩니다.

C에서 포인터의 단점

  • 포인터는 약간 복잡합니다.
  • 포인터는 분할 오류와 같은 다양한 오류를 유발하거나 전혀 필요하지 않은 메모리 위치에 액세스 할 수 있습니다.
  • 포인터에 잘못된 값이 제공되면 메모리 손상의 원인이 될 수 있습니다.
  • 포인터는 메모리 누수도 담당합니다.
  • 포인터는 변수보다 비교적 느립니다.
  • 프로그래머는 포인터로 작업하는 것이 매우 어렵습니다. 따라서 포인터를 신중하게 조작하는 것은 프로그래머의 책임입니다.

요약

  • 포인터는 데이터가 저장되는 메모리 위치 일뿐입니다.
  • 포인터는 메모리 위치에 액세스하는 데 사용됩니다.
  • 널 포인터, 와일드 포인터, 무효 포인터 및 기타 유형의 포인터와 같은 다양한 유형의 포인터가 있습니다.
  • 포인터를 배열 및 문자열과 함께 사용하여 요소에보다 효율적으로 액세스 할 수 있습니다.
  • 함수를 동적으로 호출하는 함수 포인터를 만들 수 있습니다.
  • 포인터 산술로 알려진 포인터에서 산술 연산을 수행 할 수 있습니다.
  • 포인터는 포인터 배열을 정의 할 때 다른 함수를 쉽게 호출 할 수있는 함수를 가리킬 수도 있습니다.
  • 다른 변수 데이터 유형을 처리하려는 경우 다음을 수행 할 수 있습니다. typecast void 포인터를 사용하십시오.

Write a Comment

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