Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

C 언어의 포인터와 1차원 배열 설명

<시간/>

포인터는 다른 변수의 주소를 저장하는 변수입니다.

기능

포인터의 기능은 아래에 설명되어 있습니다 -

  • 포인터는 메모리 공간을 절약합니다.
  • 메모리 위치에 직접 접근하기 때문에 포인터의 실행 시간이 더 빠릅니다.
  • 포인터의 도움으로 메모리에 효율적으로 액세스합니다. 즉, 메모리가 동적으로 할당 및 해제됩니다.
  • 포인터는 데이터 구조와 함께 사용됩니다.

포인터 선언, 초기화 및 액세스

다음 진술을 고려하십시오 -

int qty = 179;

메모리에서 변수는 다음과 같이 나타낼 수 있습니다. -

C 언어의 포인터와 1차원 배열 설명

포인터 선언

그것은 'p'가 아래 문장에서 언급된 바와 같이 다른 정수 변수의 주소를 보유하는 포인터 변수임을 의미합니다 -

Int *p;

포인터 초기화

주소 연산자(&)는 포인터 변수를 초기화하는 데 사용됩니다.

예를 들어 -

int qty = 175;
int *p;
p= &qty;

C 언어의 포인터와 1차원 배열 설명

포인터를 통한 변수 액세스

변수의 값에 접근하기 위해 간접 연산자(*)를 사용합니다.

예를 들어 -

C 언어의 포인터와 1차원 배열 설명

여기서 '*'는 주소의 값으로 취급될 수 있습니다.

두 문장은 다음 문장과 동일합니다 -

p = &qty;
n = *p; n =qty

포인터 및 1차원 배열

  • 컴파일러는 배열의 모든 요소에 대해 연속 메모리 위치를 할당합니다.
  • 기본 주소 =배열의 첫 번째 요소 주소(인덱스 0).
    • 예를 들어 - int a [5] ={10, 20,30,40,50};

요소

5개의 요소는 다음과 같이 저장됩니다 -

C 언어의 포인터와 1차원 배열 설명

  • 'p'가 정수 포인터로 선언되면 배열 'a'는 다음 할당으로 가리킬 수 있습니다. -

p = a;
(or) p = &a[0];
  • 'a'의 모든 값은 p++를 사용하여 한 요소에서 다른 요소로 이동하여 액세스합니다. 포인터가 증가하면 포인터가 가리키는 데이터 유형의 크기만큼 값이 증가합니다. 이 길이를 "축척 계수"라고 합니다.

  • 'p'와 'p'의 관계는 아래에 설명되어 있습니다. -

P = &a[0] = 1000
P+1 = &a[1] = 1004
P+2 = &a[2] = 1008
P+3 = &a[3] = 1012
P+4 = &a[4] = 1016
  • 요소의 주소는 해당 인덱스와 데이터 유형의 스케일 팩터를 사용하여 계산됩니다. 이것을 설명하는 예가 여기에 나와 있습니다.

Address of a[3] = base address + (3* scale factor of int)
= 1000 + (3*4)
= 1000 +12
= 1012
  • 배열 인덱싱을 사용하는 대신 포인터를 사용하여 배열 요소에 액세스할 수 있습니다.

  • *(p+3)은 [3]의 값을 제공합니다.

a[i] = *(p+i)

예시 프로그램

다음은 포인터와 1차원 배열을 위한 C 프로그램입니다 -

#include<stdio.h>
main ( ){
   int a[5];
   int *p,i;
   printf ("Enter 5 lements");
   for (i=0; i<5; i++)
      scanf ("%d", &a[i]);
   p = &a[0];
   printf ("Elements of the array are");
   for (i=0; i<5; i++)
      printf("%d", *(p+i));
}

출력

위의 프로그램이 실행되면 다음과 같은 결과가 생성됩니다 -

Enter 5 elements : 10 20 30 40 50
Elements of the array are : 10 20 30 40 50