C++의 포인터 변 수 를 깊이 해석 합 니 다.

4859 단어 C++
포인터 변 수 는 특수 한 변수 입 니 다.이전에 배 운 다른 유형의 변수 와 다른 점 은 다른 변 수 를 가리 키 는 것 입 니 다.포인터 변수 와 가리 키 는 변수 간 의 관 계 를 표시 하기 위해 C++에서"*"기호 로 가리 키 는 것 을 표시 합 니 다.예 를 들 어 ipointer 는 포인터 변수 이 고*i포인터 표시 ipointer 가 가리 키 는 변수 입 니 다.
다음 두 문장의 작용 은 같다.

  i=3;
  *i_pointer=3;

포인터 변수 정의
C++는 모든 변 수 를 사용 하기 전에 그 유형 을 지정 해 야 한다 고 규정 합 니 다.컴 파일 할 때 변수 형식 에 따라 저장 공간 을 분배 합 니 다.포인터 변 수 를 포인터 형식 으로 정의 해 야 합 니 다.먼저 구체 적 인 예 를 보 자.

  int i, j;              //      i,j
  int *pointer_1, *pointer_2;    //      *pointer_1,*pointer_2
두 번 째 줄 에서 시작 하 는 int 는 정 의 된 포인터 변 수 는 전체 데 이 터 를 가리 키 는 포인터 변 수 를 말한다.즉,포인터 변수 pointer1 과 pointer2.전체 데이터(예 를 들 어 i 와 j)만 가리 킬 수 있 고 부동 소수점 변수 a 와 b 를 가리 킬 수 없습니다.이 int 는 포인터 변수의 기본 형식 입 니 다.포인터 변수의 기본 형식 은 이 포인터 변수 가 가리 킬 수 있 는 변수의 종 류 를 지정 하 는 데 사 용 됩 니 다.
포인터 변 수 를 정의 하 는 일반적인 형식 은:
    기본 형식*포인터 변수 이름;
다음은 모두 합 법 적 인 정의 입 니 다.

  float *pointer_3; // pointer_3              
  char *pointer_4; // pointer_4             
주의:포인터 변수 이름 은 pointer 입 니 다.3 과 pointer4,*pointer 가 아 닙 니 다.3 과*pointer4.즉,'*'는 포인터 변수 이름 의 일부분 이 아니 라 변 수 를 정의 할 때 변수 이름 앞 에'*'를 추가 하면 이 변 수 는 포인터 변수 임 을 나타 낸다.
그렇다면 어떻게 바늘 변 수 를 다른 변 수 를 가리 키 게 합 니까?가리 키 는 변수의 주 소 를 포인터 변수 에 부여 하면 됩 니 다.예 를 들 면:

  pointer_1=&i; //   i          pointer_1 
  pointer_2=&j; //   j          pointer_2 
이렇게,pointer1.변 수 를 가리 키 는 i,pointer2.변수 j 를 가리킨다.그림 을 보다.

일반적인 C++컴 파일 시스템 은 매개 포인터 변수 에 4 개의 바이트 의 저장 부 를 할당 하여 변수의 주 소 를 저장 합 니 다.
포인터 변 수 를 정의 할 때 주의해 야 합 니 다.하나의 정수 로 포인터 변수 에 초기 값 을 부여 할 수 없습니다.포인터 변 수 를 정의 할 때 기본 형식 을 지정 해 야 합 니 다.
인용 포인터 변수
포인터 변수 와 관련 된 연산 자가 두 개 있 습 니 다.
&주소 연산 자 를 가 져 옵 니 다.
 *포인터 연산 자.
예 를 들 어&a 는 변수 a 의 주소 이 고*p 는 포인터 변수 p 가 가리 키 는 저장 장치 입 니 다.
【예】포인터 변 수 를 통 해 정형 변 수 를 방문 합 니 다.

#include <iostream>
using namespace std;
int main( )
{
  int a,b; //      a,b
  int *pointer_1,*pointer_2; //      *pointer_1,*pointer_2
  a=100;b=10; // a,b  
  pointer_1=&a; //   a     pointer_1
  pointer_2=&b; //   a     pointer_2
  cout<<a<<" "<<b<<endl; //  a b  
  cout<<*pointer_1<<" "<<*pointer_2<<endl; //  *pointer_1 *pointer_2  
  return 0;
}
실행 결 과 는:

100 10  (a b  )
100 10  (*pointer_1 *pointer_2  )
대조 도 분석 해 주세요.

다음은"&"와"*"연산 자 에 대해 설명 하 겠 습 니 다.
1)"pointer"가 실행 되 었 다 면1=&a;”문구,말씀 좀 여 쭙 겠 습 니 다&*pointer1 의 의 미 는 무엇 입 니까?"*"두 연산 자의 우선 순위 와 같 지만 오른쪽 에서 왼쪽 방향 으로 결합 하여*pointer 를 먼저 진행 합 니 다.1 의 연산,그것 이 바로 변수 a,다시 실행&연산 입 니 다.그래서&*pointer1&a 와 같 습 니 다.즉,변수 a 의 주소 입 니 다.
pointer 가 있다 면2=&*pointer_1;그것 의 역할 은&a(a 의 주소)를 pointer 에 부여 하 는 것 입 니 다.2,포인터2.원래 b 를 가리 키 는데 다시 할당 한 후에 b 를 가리 키 지 않 고 a 를 가리 키 기도 합 니 다.

2)*&a 의 의 미 는 무엇 입 니까?먼저&a 의 연산 을 하고 a 의 주 소 를 얻 은 다음 에*연산 을 한다.즉,&a 가 가리 키 는 변수,*&a 와*pointer1 의 역할 은 같다.1=&a;”),그것들 은 변수 a 와 같다.즉*&a 와 a 등가,그림 참조.

【예】a 와 b 두 정 수 를 입력 하고 먼저 크 고 작은 순서 로 a 와 b 를 출력 합 니 다(포인터 변수 로 처리).
이 문 제 를 푸 는 방향 은 두 개의 포인터 변 수 를 p1 과 p2 로 설정 하여 각각 a 와 b 를 가리 키 게 하 는 것 이다.p1 을 a 와 b 의 큰 자 를 가리 키 고 p2 는 작은 자 를 가리 키 며 순서대로*p1 을 출력 합 니 다.*p2 는 먼저 크 고 작은 순서대로 a 와 b 를 출력 합 니 다.이 방향 으로 프로그램 을 작성 하 는 것 은 다음 과 같 습 니 다.

#include <iostream>
using namespace std;
int main( )
{
  int *p1,*p2,*p,a,b;
  cin>>a>>b; //      
  p1=&a; // p1  a
  p2=&b; // p2  b
  if(a<b) //  a<b  p1 p2    
  {
   p=p1;p1=p2;p2=p; // p1    p2     
  }
  cout<<"a="<<a<<" b="<<b<<endl;
  cout<<"max="<<*p1<<" min="<<*p2<<endl;
  return 0;
}
운행 상황 은 다음 과 같다.

4578L
a=45 b=78
max=78 min=45
a 의 값 45,b 의 값 78 을 입력 하 십시오.a
이 문제 의 알고리즘 은 정형 변수의 값 을 교환 하지 않 고 두 개의 포인터 변수의 값 을 교환 하 는 것 입 니 다.

좋은 웹페이지 즐겨찾기