산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

배열과 포인터의 관계

배열과 포인터의 관계

이 튜토리얼에서는 C 프로그래밍에서 배열과 포인터 사이의 관계에 대해 배울 것입니다. 포인터를 사용하여 배열 요소에 액세스하는 방법도 배우게 됩니다.

배열과 포인터의 관계에 대해 배우기 전에 다음 두 가지 항목을 확인하십시오.

<시간>

배열과 포인터 간의 관계

배열은 순차적 데이터 블록입니다. 배열 요소의 주소를 출력하는 프로그램을 작성해 봅시다.

#include <stdio.h>
int main() {
   int x[4];
   int i;

   for(i = 0; i < 4; ++i) {
      printf("&x[%d] = %p\n", i, &x[i]);
   }

   printf("Address of array x: %p", x);

   return 0;
}

출력

&x[0] = 1450734448
&x[1] = 1450734452
&x[2] = 1450734456
&x[3] = 1450734460
Address of array x: 1450734448

x 배열의 연속된 두 요소 사이에는 4바이트의 차이가 있습니다. . int의 크기 때문입니다. 4바이트입니다(컴파일러에서).

&x[0]의 주소는 및 x 는 똑같은. 변수 이름 x 때문입니다. 배열의 첫 번째 요소를 가리킵니다.

<그림>

위의 예에서 &x[0] x와 동일 . 그리고 x[0] *x과 동일합니다. .

마찬가지로

<시간>

예시 1:포인터와 배열

#include <stdio.h>
int main() {

  int i, x[6], sum = 0;

  printf("Enter 6 numbers: ");

  for(i = 0; i < 6; ++i) {
  // Equivalent to scanf("%d", &x[i]);
      scanf("%d", x+i);

  // Equivalent to sum += x[i]
      sum += *(x+i);
  }

  printf("Sum = %d", sum);

  return 0;
}

프로그램을 실행하면 다음과 같이 출력됩니다.

Enter 6 numbers: 2
3
4
4
12
4
Sum = 29 

여기에서 배열 x를 선언했습니다. 6개의 요소 중. 배열의 요소에 액세스하기 위해 포인터를 사용했습니다.

<시간>

대부분의 컨텍스트에서 배열 이름은 포인터로 소멸됩니다. 간단히 말해서 배열 이름은 포인터로 변환됩니다. 이것이 포인터를 사용하여 배열 요소에 액세스할 수 있는 이유입니다. 그러나 포인터와 배열은 같지 않음을 기억해야 합니다. .

배열 이름이 포인터로 붕괴되지 않는 몇 가지 경우가 있습니다. 자세한 내용은 다음을 참조하십시오. 배열 이름이 포인터로 소멸되지 않는 경우는 언제입니까?

<시간>

예시 2:배열 및 포인터

#include <stdio.h>
int main() {

  int x[5] = {1, 2, 3, 4, 5};
  int* ptr;

  // ptr is assigned the address of the third element
  ptr = &x[2]; 

  printf("*ptr = %d \n", *ptr);   // 3
  printf("*(ptr+1) = %d \n", *(ptr+1)); // 4
  printf("*(ptr-1) = %d", *(ptr-1));  // 2

  return 0;
}

프로그램을 실행하면 다음과 같이 출력됩니다.

*ptr = 3 
*(ptr+1) = 4 
*(ptr-1) = 2

이 예에서 &x[2] , 세 번째 요소의 주소는 ptr에 할당됩니다. 바늘. 따라서 3 *ptr을 인쇄할 때 표시되었습니다. .

그리고 *(ptr+1) 인쇄 네 번째 요소를 제공합니다. 마찬가지로 *(ptr-1) 인쇄 두 번째 요소를 제공합니다.


C 언어

  1. 빅 데이터와 클라우드 컴퓨팅의 관계는 무엇입니까?
  2. C++ 포인터와 배열
  3. C 패스 주소 및 포인터
  4. C 구조체와 포인터
  5. 전기 모터의 전압과 전류 관계
  6. IoT와 에지 컴퓨팅의 관계
  7. SCADA와 HMI의 차이점
  8. DC 모터와 AC 모터의 차이점
  9. 브레이징과 납땜의 차이점
  10. 2행정 엔진과 4행정 엔진의 차이점