Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

C에서 const char* p, char * const p, const char * const p의 차이점

<시간/>

포인터

C 프로그래밍 언어에서 *p는 포인터에 저장된 값을 나타내고 p는 값의 주소를 나타내며 포인터라고 합니다.

상수 문자*char const* 포인터가 상수 char를 가리킬 수 있고 이 포인터가 가리키는 char 값을 변경할 수 없다고 말합니다. 하지만 포인터의 값은 일정하지 않고 다른 상수 char를 가리킬 수 있으므로 변경할 수 있습니다.

char* const 포인터가 char을 가리킬 수 있고 이 포인터가 가리키는 char의 값이 변경될 수 있다고 말합니다. 그러나 포인터 값은 현재 일정하고 다른 문자를 가리킬 수 없으므로 변경할 수 없습니다.

const char* const 포인터가 상수 char를 가리킬 수 있고 이 포인터가 가리키는 int 값을 변경할 수 없다고 말합니다. 그리고 포인터의 값도 변경할 수 없으며 이제 상수이며 다른 상수 문자를 가리킬 수 없습니다.

기본 규칙은 구문 이름을 오른쪽에서 왼쪽으로 지정하는 것입니다.

// constant pointer to constant char
const char * const
// constant pointer to char
char * const
// pointer to constant char
const char *

예(C)

주석 처리된 오류 코드의 주석을 제거하고 오류를 확인합니다.

#include <stdio.h>
int main() {
   //Example: char const*
   //Note: char const* is same as const char*
   const char p = 'A';
   // q is a pointer to const char
   char const* q = &p;
   //Invalid asssignment
   // value of p cannot be changed
   // error: assignment of read-only location '*q'
   //*q = 'B';
   const char r = 'C';
   //q can point to another const char
   q = &r;
   printf("%c\n", *q);
   //Example: char* const
   char u = 'D';
   char * const t = &u;
   //You can change the value
   *t = 'E';
   printf("%c", *t);
   // Invalid asssignment
   // t cannot be changed
   // error: assignment of read-only variable 't'
   //t = &r;
   //Example: char const* const
   char const* const s = &p;
   // Invalid asssignment
   // value of s cannot be changed
   // error: assignment of read-only location '*s'
   // *s = 'D';
   // Invalid asssignment
   // s cannot be changed
   // error: assignment of read-only variable 's'
   // s = &r;
   return 0;
}

출력

C
E