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

C++ 포인터와 배열

C++ 포인터 및 배열

이 튜토리얼에서는 예제를 통해 배열과 포인터의 관계에 대해 배울 것입니다.

C++에서 포인터는 다른 변수의 주소를 보유하는 변수입니다. 포인터는 단일 변수의 주소를 저장할 수 있을 뿐만 아니라 배열의 셀 주소도 저장할 수 있습니다.

다음 예를 고려하십시오.

int *ptr;
int arr[5];

// store the address of the first
// element of arr in ptr
ptr = arr;

여기, ptr arr 동안 포인터 변수입니다. int입니다. 정렬. 코드 ptr = arr; 변수 ptr에 배열의 첫 번째 요소 주소를 저장합니다. .

arr를 사용했습니다. &arr[0] 대신 . 이것은 둘 다 동일하기 때문입니다. 따라서 아래의 코드는 위의 코드와 동일합니다.

int *ptr;
int arr[5];
ptr = &arr[0];

나머지 배열 요소의 주소는 &arr[1]으로 지정됩니다. , &arr[2] , &arr[3] , 및 &arr[4] .

<시간>

모든 배열 요소를 가리킴

동일한 포인터 ptr을 사용하여 배열의 네 번째 요소를 가리킬 필요가 있다고 가정합니다. .

여기서 ptr이면 위의 예에서 첫 번째 요소를 가리킨 다음 ptr + 3를 가리킵니다. 네 번째 요소를 가리킬 것입니다. 예를 들어,

int *ptr;
int arr[5];
ptr = arr;

ptr + 1 is equivalent to &arr[1];
ptr + 2 is equivalent to &arr[2];
ptr + 3 is equivalent to &arr[3];
ptr + 4 is equivalent to &arr[4];

마찬가지로 단일 포인터를 사용하여 요소에 액세스할 수 있습니다. 예를 들어,

// use dereference operator
*ptr == arr[0];
*(ptr + 1) is equivalent to arr[1];
*(ptr + 2) is equivalent to arr[2];
*(ptr + 3) is equivalent to arr[3];
*(ptr + 4) is equivalent to arr[4];

ptr = &arr[2];을 초기화했다고 가정합니다. 그럼

ptr - 2 is equivalent to &arr[0];
ptr - 1 is equivalent to &arr[1]; 
ptr + 1 is equivalent to &arr[3];
ptr + 2 is equivalent to &arr[4];
<그림>

참고: ptr 사이의 주소 및 ptr + 1 4바이트 차이가 납니다. ptr 때문입니다. int에 대한 포인터입니다. 데이터. 그리고 int의 크기는 64비트 운영체제에서 4바이트입니다.

마찬가지로 포인터가 ptr이면 char을(를) 가리키고 있습니다. 데이터를 입력한 다음 ptr 사이의 주소 및 ptr + 1 1바이트입니다. 한 글자의 크기가 1byte이기 때문입니다.

<시간>

예제 1:C++ 포인터 및 배열

// C++ Program to display address of each element of an array 

#include <iostream>
using namespace std;

int main()
{
    float arr[3];

    // declare pointer variable
    float *ptr;
    
    cout << "Displaying address using arrays: " << endl;

    // use for loop to print addresses of all array elements
    for (int i = 0; i < 3; ++i)
    {
        cout << "&arr[" << i << "] = " << &arr[i] << endl;
    }

    // ptr = &arr[0]
    ptr = arr;

    cout<<"\nDisplaying address using pointers: "<< endl;

    // use for loop to print addresses of all array elements
    // using pointer notation
    for (int i = 0; i < 3; ++i)
    {
        cout << "ptr + " << i << " = "<< ptr + i << endl;
    }

    return 0;
}

출력

Displaying address using arrays: 
&arr[0] = 0x61fef0
&arr[1] = 0x61fef4
&arr[2] = 0x61fef8

Displaying address using pointers: 
ptr + 0 = 0x61fef0
ptr + 1 = 0x61fef4
ptr + 2 = 0x61fef8

위의 프로그램에서 우리는 먼저 포인터 변수 ptr을 사용하지 않고 단순히 배열 요소의 주소를 출력했습니다. .

그런 다음 ptr 포인터를 사용했습니다. a[0]의 주소를 가리키기 위해 , ptr + 1 a[1]의 주소를 가리키기 위해 등이 있습니다.

<시간>

대부분의 컨텍스트에서 배열 이름은 포인터로 소멸됩니다. 간단히 말해서 배열 이름은 포인터로 변환됩니다. 이것이 포인터를 사용하여 배열 요소에 액세스할 수 있는 이유입니다.

그러나 포인터와 배열은 동일하지 않다는 것을 기억해야 합니다.

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

<시간>

예 2:포인터로 사용된 배열 이름

// C++ Program to insert and display data entered by using pointer notation.

#include <iostream>
using namespace std;

int main() {
    float arr[5];
    
   // Insert data using pointer notation
    cout << "Enter 5 numbers: ";
    for (int i = 0; i < 5; ++i) {

        // store input number in arr[i]
        cin >> *(arr + i) ;

    }

    // Display data using pointer notation
    cout << "Displaying data: " << endl;
    for (int i = 0; i < 5; ++i) {

        // display value of arr[i]
        cout << *(arr + i) << endl ;

    }

    return 0;
}

출력

Enter 5 numbers: 2.5
3.5
4.5
5
2
Displaying data: 
2.5
3.5
4.5
5
2

여기,

  1. 먼저 포인터 표기법을 사용하여 사용자가 입력한 숫자를 arr 배열에 저장했습니다. .

    cin >> *(arr + i) ;

    이 코드는 아래 코드와 동일합니다.

    cin >> arr[i];

    별도의 포인터 변수를 선언하지 않고 arr 배열 이름을 사용하고 있습니다. 포인터 표기법.

    이미 알고 있듯이 배열 이름 arr 배열의 첫 번째 요소를 가리킵니다. 그래서 우리는 arr을 생각할 수 있습니다. 포인터처럼 작동합니다.

  2. 마찬가지로 for를 사용했습니다. arr 값을 표시하는 루프 포인터 표기법 사용.

    cout << *(arr + i) << endl ;

    이 코드는

    와 동일합니다.
    cout << arr[i] << endl ;

C 언어

  1. C++ 변수, 리터럴 및 상수
  2. C++ 클래스 및 개체
  3. C++ 메모리 관리:신규 및 삭제
  4. C++ 공개, 보호 및 비공개 상속
  5. C++ friend 함수 및 friend 클래스
  6. C 포인터
  7. 배열과 포인터의 관계
  8. C 패스 주소 및 포인터
  9. C 구조체와 포인터
  10. C++의 구조 및 클래스