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

C++ 포인터

C++ 포인터

이 튜토리얼에서는 C++의 포인터와 예제를 통해 포인터의 작업에 대해 배울 것입니다.

C++에서 포인터는 다른 변수의 메모리 주소를 저장하는 변수입니다.

C++의 주소

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

예 1:C++에서 변수 주소 인쇄

#include <iostream>
using namespace std;

int main()
{
    // declare variables
    int var1 = 3;
    int var2 = 24;
    int var3 = 17;

    // print address of var1
    cout << "Address of var1: "<< &var1 << endl;

    // print address of var2
    cout << "Address of var2: " << &var2 << endl;

    // print address of var3
    cout << "Address of var3: " << &var3 << endl;
}

출력

Address of var1: 0x7fff5fbff8ac
Address of var2: 0x7fff5fbff8a8
Address of var3: 0x7fff5fbff8a4

여기, 0x 시작 부분은 주소가 16진수 형식임을 나타냅니다.

첫 번째 주소는 두 번째 주소와 4바이트, 두 번째 주소는 세 번째 주소와 4바이트씩 다릅니다.

int의 크기 때문입니다. 변수는 64비트 시스템에서 4바이트입니다.

참고: 프로그램을 실행할 때 동일한 결과를 얻지 못할 수 있습니다.

<시간>

C++ 포인터

위에서 언급했듯이 포인터는 값이 아닌 주소를 저장하는 데 사용됩니다.

다음은 포인터를 선언하는 방법입니다.

int *pointVar;

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

다음과 같은 방법으로 포인터를 선언할 수도 있습니다.

int* pointVar; // preferred syntax

포인터를 선언하는 또 다른 예를 들어보겠습니다.

int* pointVar, p;

여기에서 포인터 pointVar를 선언했습니다. 및 일반 변수 p .

참고: * 연산자는 데이터 유형 뒤에 포인터를 선언하는 데 사용됩니다.

<시간>

포인터에 주소 할당

포인터에 주소를 할당하는 방법은 다음과 같습니다.

int* pointVar, var;
var = 5;

// assign address of var to pointVar pointer
pointVar = &var;

여기, 5 변수 var에 할당됩니다. . 그리고 var의 주소는 pointVar에 할당됩니다. pointVar = &var 코드가 있는 포인터 .

<시간>

포인터를 사용하여 주소에서 값 가져오기

포인터가 가리키는 값을 얻으려면 *을 사용합니다. 운영자. 예:

int* pointVar, var;
var = 5;

// assign address of var to pointVar
pointVar = &var;

// access value pointed by pointVar
cout << *pointVar << endl;   // Output: 5

위의 코드에서 var의 주소는 pointVar에 할당됩니다. . *pointVar를 사용했습니다. 해당 주소에 저장된 값을 가져옵니다.

*일 때 포인터와 함께 사용되며 역참조 연산자라고 합니다. . 포인터에서 작동하고 포인터에 저장된 주소가 가리키는 값을 제공합니다. 즉, *pointVar = var .

참고:C++에서는 pointVar*pointVar 완전히 다릅니다. *pointVar = &var;과 같은 작업은 수행할 수 없습니다.

<시간>

예제 2:C++ 포인터 작업

#include <iostream>
using namespace std;
int main() {
    int var = 5;

    // declare pointer variable
    int* pointVar;

    // store address of var
    pointVar = &var;

    // print value of var
    cout << "var = " << var << endl;

    // print address of var
    cout << "Address of var (&var) = " << &var << endl
         << endl;

    // print pointer pointVar
    cout << "pointVar = " << pointVar << endl;

    // print the content of the address pointVar points to
    cout << "Content of the address pointed to by pointVar (*pointVar) = " << *pointVar << endl;
    
    return 0;
}

출력

var = 5
Address of var (&var) = 0x61ff08

pointVar = 0x61ff08
Content of the address pointed to by pointVar (*pointVar) = 5
<그림> <시간>

포인터가 가리키는 값 변경

pointVar인 경우 var의 주소를 가리킨다. , var 값을 변경할 수 있습니다. *pointVar를 사용하여 .

예를 들어,

int var = 5;
int* pointVar;

// assign address of var
pointVar = &var;

// change value at address pointVar
*pointVar = 1;

cout << var << endl; // Output: 1

여기, pointVar&var 동일한 주소, var*pointVar일 때도 변경됩니다. 변경됩니다.

<시간>

예시 3:포인터가 가리키는 값 변경

#include <iostream>
using namespace std;
int main() {
    int var = 5;
    int* pointVar;

    // store address of var
    pointVar = &var;

    // print var
    cout << "var = " << var << endl;

    // print *pointVar
    cout << "*pointVar = " << *pointVar << endl
         << endl;

    cout << "Changing value of var to 7:" << endl;

    // change value of var to 7
    var = 7;

    // print var
    cout << "var = " << var << endl;

    // print *pointVar
    cout << "*pointVar = " << *pointVar << endl
         << endl;

    cout << "Changing value of *pointVar to 16:" << endl;

    // change value of var to 16
    *pointVar = 16;

    // print var
    cout << "var = " << var << endl;

    // print *pointVar
    cout << "*pointVar = " << *pointVar << endl;
    return 0;
}

출력

var = 5
*pointVar = 5

Changing value of var to 7:
var = 7
*pointVar = 7

Changing value of *pointVar to 16:
var = 16
*pointVar = 16
<시간>

포인터 작업 시 일반적인 실수

포인터 varPoint가 필요하다고 가정해 보겠습니다. var의 주소를 가리키기 위해 . 그럼

int var, *varPoint;

// Wrong! 
// varPoint is an address but var is not
varPoint = var;

// Wrong!
// &var is an address
// *varPoint is the value stored in &var
*varPoint = &var;

// Correct! 
// varPoint is an address and so is &var
varPoint = &var;

 // Correct!
// both *varPoint and var are values
*varPoint = var;
<시간>

권장 독서 :


C 언어

  1. C++ 데이터 유형
  2. C++ 연산자
  3. C++ 주석
  4. C++ 클래스 템플릿
  5. C 포인터
  6. 예제가 있는 C++ 포인터
  7. C - 포인터
  8. C++ 개요
  9. C++ 상수/리터럴
  10. C++의 연산자