English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C++ 포인터

이 문서에서는 포인터에 대해 모든 것을 배웁니다. 컴퓨터에 값을 저장하고 포인터를 통해 그들을 접근하는 방법을 배웁니다.

포인터는 C++의 강력한 특성으로, C++Java와 Python과 같은 다른 프로그래밍 언어와 구별됩니다。

포인터는 C ++메모리에 접근하고 주소를 조작하는 프로그램 중 하나입니다。

C ++주소

포인터를 이해하기 위해서는 먼저 컴퓨터에서 데이터를 어떻게 저장하는지 알아야 합니다。

프로그램에서 생성된 각 변수는 컴퓨터 메모리에 위치를 할당받습니다. 변수가 저장하는 값은 실제로 지정된 위치에 저장됩니다。

데이터가 어디에 저장되는지 알기 위해 C++有一个&操作符。操作符& (reference)는 변수가 사용하는 주소를 제공합니다。

var가 변수라면, &var는 그 변수의 주소를 제공합니다。

예제1:C ++내부의 주소

#include <iostream>
using namespace std;
int main()
{
    int var1 = 3;
    int var2 = 24;
    int var3 = 17;
    cout << &var1 << endl;
    cout << &var2 << endl;
    cout << &var3 << endl;
}

출력 결과

0x7fff5fbff8ac
0x7fff5fbff8a8
0x7fff5fbff8a4

주의: 귀하의 시스템에서는 같은 결과를 얻을 수 없을 수 있습니다。

시작하는 0x는 16진수 형식의 주소를 의미합니다。

주의하세요, 첫 번째 주소와 두 번째 주소는4바이트, 두 번째 주소와 세 번째 주소는4바이트.

이는 다음과 같기 때문에64비트 시스템에서 정수(int 타입의 변수)의 크기는4바이트.

포인터 변수

C ++컴퓨터 메모리 중 데이터를 직접操作할 수 있게 합니다. 필요에 따라 메모리 중 어떤 공간도 할당하고 해제할 수 있습니다. 이는 Pointer(포인터) 변수를 통해 완료됩니다。

포인터 변수는 메모리 중 다른 변수가 가리키는 특정 주소를 가리키는 변수입니다.

포인터를 선언하는 방법은 무엇인가요?

int *p;
      또는,
int* p;

위의 문장은 포인터 변수 p를 정의합니다. 그것은 메모리 주소를 저장합니다

별표(*)은 해석 연산자로, 다음과 같은 의미를 가집니다.가리키는 포인터

이곳에서 포인터 p는 int를 가리키는 포인터입니다. 즉, 그것은 메모리 주소에 있는 정수 값을 가리킵니다。

참조 연산자(&)와 참조 연산자(*)

위에서 설명한 참조 연산자(&)는 변수의 주소를 제공합니다。

메모리 주소에 저장된 값을 가져오기 위해, 우리는 해석 연산자(}}*)。

예를 들어:number 변수가 메모리 주소에 저장되어 있습니다0x123에서, 그리고 그것에는 값이 포함되어 있습니다5

reference(&) 연산자는 값을 제공합니다0x123، 그리고 dereference(*) 연산자는 값을 제공합니다5

주의:주의: c++포인터 선언에서 사용하는(*) 기호는 참조 포인터가 아닙니다. 그것은 단지 포인터를 생성하는 유사한 기호입니다.

예제2:C ++포인터

C ++프로그램이 포인터의 작동 방식을 보여줍니다.

#include <iostream>
using namespace std;
int main() {
    int *pc, c;
    
    c = 5;
    cout << "Address of c (&c): " << &c << endl;
    cout << "Value of c (c): " << c << endl << endl;
    pc = &c;    // 포인터 pc가 변수 c의 메모리 주소를 저장합니다
    cout << "pc가 가진 포인터 주소(pc): " << pc << endl;
    cout << "주소 포인터 pc가 가진 값(*pc): " << *pc << endl << endl;
    
    c = 11;    // 메모리 주소 &c에 저장된 값이5변경됩니다.11。
    cout << "주소 포인터 pc가 가진 주소(pc): " << pc << endl;
    cout << "주소 포인터 pc가 가진 내용(*pc): " << *pc << endl << endl;
    *pc = 2; 
    cout << "Address of c (&c): " << &c << endl;
    cout << "Value of c (c): " << c << endl << endl;
    return 0;
}

출력 결과

c의 주소(&c): 0046FD44
c의 값(c): 5
pc가 가진 포인터 주소(pc): 0046F
주소 포인터 pc가 가진 값(*pc): 5
주소 포인터 pc가 가진 주소(pc): 0046FD4
주소 포인터 pc가 가진 내용(*pc):
c의 주소(&c): 0046FD44
c의 값(c): 2

프로그램 사용 설명서

  • c = pc로 출력된 주소에 저장된 값을 5; 값5변수 c에 저장되어 있습니다.-0x7fff5fbff8c의 주소에 저장되어 있습니다.

  • pc = &c; 포인터 pc의 주소는 c입니다.-0x7fff5fbff8c를 출력합니다.*c를 출력합니다.5。

  • c = pc로 출력된 주소에 저장된 값을 11; pc가 가진 주소 포인터와 c - 0x7fff5fbff8c와 같습니다. 따라서, 표현식을 실행할 때*pc의 값도 변경됩니다. 지금 출력된11。

  • pc가*pc = 2할 때; 이는 pc를 - 0x7fff5fbff8c에 저장된 주소의 내용이 됩니다. 이는11되어 있습니다.2따라서, c의 값을 출력할 때, 이 값도2。

포인터 사용 시 일반적인 오류

pc가 c의 주소를 가리키기를 원한다고 가정하세요. 그런 다음,

int c; *pc;
pc=c;  /* 오류! pc는 주소이고 c는 주소가 아닙니다. */
*pc=&c; /*错误!  * pc是地址指向的值,而&c是地址。*/
pc=&c; /* 正确!  pc是一个地址,&c也是一个地址。 */
*pc=c; /* 정확!  * pc는 주소를 가리키는 값이고 c도 값입니다. */

이 두 경우에서 포인터 pc는 c의 주소를 가리키지 않습니다.

포인터와 관련된 다음 튜토리얼을 확인해야 합니다: