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

C에서 상수 포인터 및 상수에 대한 포인터 익히기

C에서는 포인터 다른 변수의 메모리 주소를 저장하는 변수이고 const 키워드 일단 초기화되면 값을 변경할 수 없는 변수나 포인터를 정의하는 데 사용됩니다. 포인터를 결합하면 const 사용 키워드를 사용하면 두 가지를 제어할 수 있습니다 -

이번 장에서는 상수 포인터의 세 가지 주요 변형을 살펴보겠습니다.

상수 포인터

상수 포인터 포인터 자체가 일정하다는 것을 의미합니다. 메모리 위치를 가리키도록 초기화되면 다른 위치를 가리킬 수 없지만 해당 위치에 저장된 값은 계속 변경될 수 있습니다.

다음은 상수 포인터의 구문입니다. -

data_type *const pointer_name = &variable;

이 구문에서 data_type 포인터가 가리키는 데이터 유형입니다. *const 포인터 자체를 상수로 만듭니다. pointer_name 포인터의 이름이고 &변수입니다. 변수의 메모리 주소를 할당합니다.

상수 포인터의 예

이 예에서는 상수 포인터 ptr을 선언합니다. 변수 x의 주소로 초기화합니다. . 그런 다음 x 값을 변경합니다. ptr 사용 그 값을 인쇄합니다.

#include <stdio.h>
int main() {
 int x = 10;
 int y = 20;
 int *const ptr = &x; // constant pointer to int
 printf("Value of x: %d\n", *ptr);
 *ptr = 15; // can change the value at address
 printf("Modified value of x: %d\n", *ptr);
 // ptr = &y; // changing pointer address is not allowed
 return 0;
}

아래는 출력입니다. 포인터가 x에 고정되어 있음을 보여주는 위 프로그램의 , 그러나 x 값 업데이트될 수 있습니다.

Value of x: 10
Modified value of x: 15

상수 포인터 오류의 예

다음은 상수 포인터 ptr를 선언하는 예입니다. 변수 x의 주소로 초기화합니다. . 그런 다음 변수 y의 주소를 가리키도록 시도합니다. . 이렇게 하면 오류 가 발생합니다. 상수 포인터는 일단 초기화되면 다른 메모리 위치를 가리킬 수 없기 때문입니다.

#include <stdio.h>
int main() {
 int x = 10;
 int y = 20;
 int *const ptr = &x; // constant pointer to int
 printf("Value of x: %d\n", *ptr);
 // Attempting to change the pointer to point to y
 ptr = &y; // cannot change the address of a constant pointer
 return 0;
}

아래 오류를 볼 수 있습니다. , 이는 상수 포인터의 주소를 변경할 수 없음을 나타냅니다.

error: assignment of read-only variable 'ptr'

상수에 대한 포인터

상수에 대한 포인터 포인터가 가리키는 값은 변경할 수 없지만 포인터 자체는 다른 메모리 주소(또는 변수)를 가리킬 수 있음을 의미합니다.

다음은 상수에 대한 포인터 구문입니다. -

const data_type *pointer_name = &variable;
data_type const *pointer = &variable;

이 구문에서 const data_type 또는 data_type const 포인터가 상수 값 pointer_name을 가리킨다는 의미입니다. 포인터의 이름이고 &변수입니다. 변수의 주소를 할당합니다.

상수에 대한 포인터의 예

이 예에서는 포인터 ptr를 선언합니다. 상수 값을 가리키고 변수 a의 주소를 할당합니다. . 그런 다음 포인터가 변수 b의 다른 주소를 가리키도록 만듭니다. 그 값을 인쇄합니다.

#include <stdio.h>
int main() {
 int a = 5;
 int b = 30;
 const int *ptr = &a; // pointer to constant int
 printf("Value of a: %d\n", *ptr);
 // *ptr = 10; //we cannot modify value through pointer
 ptr = &b; // canging pointer address
 printf("Now pointing to b: %d\n", *ptr);
 return 0;
}

다음은 출력입니다. 위 프로그램의 다른 변수를 가리키는 동일한 포인터를 보여줍니다.

Value of a: 5
Now pointing to b: 30

상수 오류에 대한 포인터의 예

다음은 상수 ptr에 대한 포인터를 선언하는 예입니다. 변수a의 주소로 초기화합니다. . 그런 다음 a의 값을 변경하려고 합니다. 포인터를 통해. 이렇게 하면 오류 가 발생합니다. 상수에 대한 포인터는 자신이 가리키는 값을 수정할 수 없기 때문입니다.

#include <stdio.h>
int main() {
 int a = 5;
 const int *ptr = &a; // pointer to constant int
 printf("Value of a: %d\n", *ptr);
 // we cnnot modify value through pointer to constant
 *ptr = 10; 
 return 0;
}

아래에서 출력을 볼 수 있습니다. , 오류가 표시됨 이는 상수에 대한 포인터를 통해 값을 수정할 수 없음을 나타냅니다.

error: assignment of read-only location '*ptr'

상수에 대한 상수 포인터

상수에 대한 상수 포인터 메모리 주소를 변경할 수 없는 포인터이며 해당 메모리 주소에 저장된 값도 변경할 수 없습니다. 두 작업 모두 제한되어 있으므로 값만 읽을 수 있고 다른 것은 읽을 수 없습니다.

다음은 상수에 대한 상수 포인터의 구문입니다. -

const data_type *const pointer_name = &variable;

이 구문에서 −

상수에 대한 상수 포인터의 예

이 예에서는 상수 ptr에 대한 상수 포인터를 선언합니다. 변수 a의 메모리 주소를 할당합니다. . 그런 다음 a 값을 인쇄합니다. 포인터를 사용합니다.

#include <stdio.h>
int main() {
 int a = 10;
 const int *const ptr = &a; // constant pointer to constant
 printf("Value of a: %d\n", *ptr);
 // *ptr = 15; // we cannot modify value
 // ptr = &b; // we annot change pointer location
 return 0;
}

다음은 출력입니다. 위 프로그램 중 -

Value of a: 10

상수 오류에 대한 상수 포인터의 예

이 예에서는 상수ptr에 대한 상수 포인터를 선언합니다. 변수 a로 초기화합니다. . 그런 다음 포인터를 통해 값을 수정하고 포인터가 다른 변수를 가리키도록 시도합니다. 두 작업 모두 허용되지 않으며 컴파일러 오류가 발생합니다. .

#include <stdio.h>
int main() {
 int a = 10;
 int b = 20;
 const int *const ptr = &a; // constant pointer to constant
 printf("Value of a: %d\n", *ptr);
 // *ptr = 15; // we cnnot modify value
 // ptr = &b; // we cannot change pointer address
 return 0;
}

아래에서 출력을 볼 수 있습니다. 오류 표시 -

Value of a: 10

상수 포인터 유형의 차이점

다음 표는 차이점을 보여줍니다. 상수 포인터, 상수에 대한 포인터, 상수에 대한 상수 포인터.

변형 정의 주소를 변경할 수 있나요? 값을 변경할 수 있나요? 예제 구문 상수 포인터주소가 고정되어 있지만 해당 주소의 값을 수정할 수 있는 포인터입니다.아니요예
int *const p = &x;
상수에 대한 포인터다른 주소를 가리킬 수 있지만 지정된 위치의 값을 수정할 수 없는 포인터입니다.예아니요
const int *p = &x;
상수에 대한 상수 포인터주소가 고정되어 있고 해당 주소의 값을 수정할 수 없는 포인터입니다.NoNo
const int *const p = &x;

결론

이 장에서는 상수 포인터와 C의 상수에 대한 포인터를 다루었습니다. 상수 포인터 주소를 수정하지만 값 변경을 허용합니다. 상수에 대한 포인터 주소 변경은 허용하지만 값은 변경할 수 없으며 상수에 대한 상수 포인터 둘 다 제한하세요.


C 언어

  1. 인쇄 예제가 있는 C++ 표준 템플릿 라이브러리(STL)의 맵
  2. C++ 변수 유형
  3. 씨 헬로월드! 예:첫 번째 프로그램
  4. C++ 공개, 보호 및 비공개 상속
  5. 배열과 포인터의 관계
  6. C의 비트 연산자:AND, OR, XOR, 시프트 및 보수
  7. C 튜토리얼
  8. C++ 메모리 관리:신규 및 삭제
  9. C++ 동적 메모리
  10. C# 대 C++:C#과 C++의 차이점은 무엇입니까?