const 포인터 사용법 요약

2886 단어 포인터Constcc++

1.const 한정자


const 한정자는 하나의 대상을 상변수로 변환할 수 있으며, 상량은 정의된 후에 수정될 수 없기 때문에 정의할 때 반드시 초기화됩니다.
const int bufSize = 512;//OK
bufSize = 0;//error,bufSize 
const int i;//error, 

2. const 및 포인터


2.1 상수를 가리키는 바늘 변수


일반 형식:
const 형식 이름 * 바늘 변수 이름;
const int * p1;// 

설명:
const는 p1 바늘이 가리키는 대상을 한정하고 바늘 p 자체를 한정하지 않습니다.정의할 때 초기화하지 않고 다른 const 대상을 가리키는 값을 다시 부여할 수 있지만 p를 통해 가리키는 대상의 값을 변경할 수 없습니다
예:
const int a = 10;//a , 
const int b = 15;
const int *p1;
p1 = &a;//ok
*p1= 20;//error, p1 a 
p1 = &b;//ok, 
*p1= 20;//error, p1 b 

분석:
본질적으로 p1이 가리키는 대상이const인지 아닌지를 구분할 방법이 없기 때문에 시스템은 그것이 가리키는 모든 대상을const로 간주합니다.그래서const 대상을 가리키는 바늘도 비const 대상을 가리킬 수 있다.
예:
int c = 15;// const 
p1 = &c;//ok, const 
*p1 = 20;//error

요약:
정의할 때 초기화되지 않을 수 있습니다. const 대상을 가리키는 바늘을 통해 값을 수정하려는 모든 행위는 컴파일 오류를 초래할 수 있습니다.바늘 자체의 값은 바뀔 수 있다. 이렇게 하면 바늘 변수 p1은 서로 다른 주소를 가리키고 이를 인용하는 작업을 하면 서로 다른 값을 얻을 수 있다.
실제 프로그램에서 const를 가리키는 바늘은 함수의 인삼으로 자주 사용된다.인삼을 const를 가리키는 지침으로 정의하여 함수에 전달되는 실제 대상이 함수에서 인삼 때문에 수정되지 않도록 합니다.

2.1.1 계속 분석


(1)const 대상의 주소를 일반적이고 비const 대상의 지침에 부여하면 컴파일할 때 오류가 발생합니다
예:
const int val = 15;//const 
void *ptr2 = &val;//error,iconst nt *   int *
const void *ptr3 = &val;

(2)void* 포인터를 사용하여const 대상의 주소를 저장할 수 없으며,const void* 형식의 포인터를 사용하여const 대상의 주소를 저장해야 합니다
예:
const int val = 15;//const 
void *ptr2 = &val;//error,iconst nt *   int *
const void *ptr3 = &val;

2.2 일반 포인터(const 포인터)


이런 바늘 변수를 상시 바늘 변수라고 하는데, 약칭 상시 바늘이라고 하는데, 즉 바늘 값은 바꿀 수 없다.
일반 형식:
형식 이름 * const 포인터 변수 이름;
const int *p;

설명:
const는 포인터 변수를 한정합니다. const 포인터 변수에 값을 부여하려는 모든 행위는 컴파일 오류를 초래할 수 있습니다. 이 포인터를 통해 가리키는 대상의 값을 수정할 수 있는지 여부는 대상 자체에 달려 있습니다.
예:
int a = 12,b = 15;
int * const p = &a;// 

p = &b;  //error, p 
*p = 20;  //ok, 

요약:
포인터 변수의 지향은 변하지 않는다.

2.3 상수를 가리키는 상시 바늘


일반 형식:
const 형식 이름 * const 포인터 변수 이름;
예:
	int a = 12,b = 15;
	const int * const p = &a;// 

	p = &b;  //error, p 
	*p = 20;  //error, p a 
	a = 20; //ok

요약:
상수를 가리키는 일반 포인터 즉 포인터 변수는 고정된 대상을 가리키며, 이 대상의 값은 변경할 수 없습니다(포인터 변수를 통해 대상의 값을 변경할 수 없습니다).

 3.총결산


그러면 const와 바늘의 관계를 어떻게 기억합니까?우리는 const가 *에 있는 위치에서 다음과 같이 기억할 수 있다.
const int *p = &a;
const는 *의 왼쪽에 표시됩니다.
포인터 p를 통해 가리키는 내용을 수정할 수 없습니다.
int * const p =&a;
const는 *의 오른쪽에 표시됩니다.
포인터 p의 지향, 즉 포인터 값을 바꿀 수 없습니다

좋은 웹페이지 즐겨찾기