English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이 문서에서는 포인터에 대해 모든 것을 배웁니다. 컴퓨터에 값을 저장하고 포인터를 통해 그들을 접근하는 방법을 배웁니다.
포인터는 C++의 강력한 특성으로, C++Java와 Python과 같은 다른 프로그래밍 언어와 구별됩니다。
포인터는 C ++메모리에 접근하고 주소를 조작하는 프로그램 중 하나입니다。
포인터를 이해하기 위해서는 먼저 컴퓨터에서 데이터를 어떻게 저장하는지 알아야 합니다。
프로그램에서 생성된 각 변수는 컴퓨터 메모리에 위치를 할당받습니다. 변수가 저장하는 값은 실제로 지정된 위치에 저장됩니다。
데이터가 어디에 저장되는지 알기 위해 C++有一个&操作符。操作符& (reference)는 변수가 사용하는 주소를 제공합니다。
var가 변수라면, &var는 그 변수의 주소를 제공합니다。
#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++포인터 선언에서 사용하는(*) 기호는 참조 포인터가 아닙니다. 그것은 단지 포인터를 생성하는 유사한 기호입니다.
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의 주소를 가리키지 않습니다.
포인터와 관련된 다음 튜토리얼을 확인해야 합니다: