programing

const int*, const int * const 및 int const *의 차이점은 무엇입니까?

randomtip 2022. 12. 21. 22:54
반응형

const int*, const int * const 및 int const *의 차이점은 무엇입니까?

는 항상 알고 있어요.const int*,const int * const , , , , 입니다.int const *올바르게 동작합니다.할 수 있는 것과 할 수 없는 것을 정의하는 일련의 규칙이 있습니까?

과제, 기능 전달 등에 대해 해야 할 일과 하지 말아야 할 일을 모두 알고 싶습니다.

시계방향/나선형 규칙에 따라 뒤로 읽습니다.

  • int*로의
  • int const * - const int -
  • int * const int-로 합니다.
  • int const * const const const int.

이제 첫 번째const할 수 즉, 다음과 같습니다.

  • const int *==int const *
  • const int * const==int const * const

만약 당신이 정말로 미쳐가고 싶다면, 당신은 다음과 같은 것을 할 수 있습니다.

  • int **로의
  • int ** const 포인터에 대한 const const.
  • int * const *에 대한 const int의 const 포인터
  • int const ** int-const 로의
  • int * const * const에 대한 const 에서 const const에 포인터
  • ...

확실히 ''의 를 위해서const:

int a = 5, b = 10, c = 15;

const int* foo;     // pointer to constant int.
foo = &a;           // assignment to where foo points to.

/* dummy statement*/
*foo = 6;           // the value of a can´t get changed through the pointer.

foo = &b;           // the pointer foo can be changed.



int *const bar = &c;  // constant pointer to int 
                      // note, you actually need to set the pointer 
                      // here because you can't change it later ;)

*bar = 16;            // the value of c can be changed through the pointer.    

/* dummy statement*/
bar = &a;             // not possible because bar is a constant pointer.           

foo는 상수 정수에 대한 변수 포인터입니다.이를 통해 가리키는 값은 변경할 수 있지만 가리키는 값은 변경할 수 없습니다.에서 볼 수 .C-style 에서는 C-style string에 있습니다.이 문자열은 포인터를 가지고 있습니다.const char. 할 수 수 가리키는 문자열은 변경할 수 있지만 이러한 문자열의 내용은 변경할 수 없습니다.이것은 문자열 자체가 프로그램의 데이터 세그먼트에 있고 변경할 수 없는 경우에 중요합니다.

bar는 변경할 수 있는 값에 대한 고정 또는 고정 포인터입니다.이것은 여분의 통사설탕이 없는 참고문헌과 같다.는 '', '아까', '아까', '아까'를 사용합니다.T* const가 한)NULL포인터

시계/나선형 규칙에 대해 잘 모르는 경우: 변수 이름에서 시계 방향으로 이동합니다(이 경우 뒤로 이동). 다음 포인터 또는 입력으로 이동합니다.식이 끝날 때까지 반복합니다.

다음은 데모입니다.

int로의 포인터

int const에 대한 const 포인터

int const로의 포인터

const int 포인터

int로의 포인터를 계속하다

에서는 이미에 대한 만, 은, .typedef.s! 순순문 s s s s s s s s s s s s s s s s s s 。

예를 들어 다음과 같습니다.

typedef char *ASTRING;
const ASTRING astring;

astringchar * const 아니라, 이에요.const char * 게게제제 . . . . . 、 . 、 . 、 . 、 . 、 . 、 . 、 . 、 . 、 . 、 . . 。const처음부터가 아니라 오른쪽에 있습니다.

거의 모든 사람이 지적한 것처럼:

차이가 있나요?const X* p,X* const p ★★★★★★★★★★★★★★★★★」const X* const p

포인터 선언을 오른쪽에서 왼쪽으로 읽어야 합니다.

  • const X* p"a X"는p points to constant X"를X자형 p자형 p자형 p자형 p자형 p자형 p자형 p자형 p자형 p자형이다.

  • X* const p"p는 일정하지 않은 X에 대한 상수 포인터"를 의미합니다. 포인터 p 자체를 변경할 수는 없지만 p를 통해 X 객체를 변경할 수는 있습니다.

  • const X* const p를 의미합니다.자체를 p를 X 도 없습니다.포인터 p 자체를 변경할 수도 없고 p를 통해 X 객체를 변경할 수도 없습니다.

기억하기 쉬운 방법:

const가 * 이전이면 값은 일정합니다.

const가 * 뒤에 있는 경우 주소는 일정합니다.

const를 * 이전과 이후에 모두 사용할 수 있는 경우 값과 주소는 모두 일정합니다.

예.

  1. int * const var; //여기서 주소는 상수입니다.

  2. int const * var; //여기서 값은 상수입니다.

  3. int const * const var; // 값과 주소가 모두 일정합니다.

간단하지만 까다롭습니다. 경우 '하다'를 적용할 수 하시기 바랍니다.const에 대한 한정자( 「 」 。int,char,float등 ) 。

다음 예를 보겠습니다.


const int *p> ==>*p전용입니다.p에 대한 포인터입니다.

int const *p> ==>*p전용입니다.p에 대한 포인터입니다.


int *p const==> 잘못된 설명입니다.컴파일러가 구문 오류를 발생시킨다.

int *const p> ==>p전용입니다.p는 정수에 대한 상수 포인터입니다.로서 「」라고 합니다.p여기에서는 읽기 전용이며 선언과 정의는 같은 위치에 있어야 합니다.


const int *p const==> 잘못된 설명입니다.컴파일러가 구문 오류를 발생시킨다.

const int const *p> ==>*p 전용입니다.

const int *const p> ==>*p ★★★★★★★★★★★★★★★★★」p전용입니다.p는 상수 정수에 대한 상수 포인터입니다.로서 「」라고 합니다.p여기에서는 읽기 전용이며 선언과 정의는 같은 위치에 있어야 합니다.


int const *p const==> 잘못된 설명입니다.컴파일러가 구문 오류를 발생시킨다.

int const int *p==> 잘못된 설명입니다.컴파일러가 구문 오류를 발생시킨다.

int const const *p> ==>*p으로, 「읽기 전용」, 「읽기 전용」에 합니다.int const *p

int const *const p> ==>*p ★★★★★★★★★★★★★★★★★」p전용입니다.p는 상수 정수에 대한 상수 포인터입니다.로서 「」라고 합니다.p여기에서는 읽기 전용이며 선언과 정의는 같은 위치에 있어야 합니다.

  1. 상시 참조:

    상수 변수(여기서는 int)에 대한 참조입니다.참조 크기가 실제 값보다 작기 때문에 주로 변수를 참조로 전달하지만, 실제 변수에 대한 별칭과 같은 부작용이 있습니다.에일리어스에 대한 완전한 접근을 통해 주 변수를 실수로 변경할 수 있으므로, 이러한 부작용을 방지하기 위해 일정하게 유지합니다.

    int var0 = 0;
    const int &ptr1 = var0;
    ptr1 = 8; // Error
    var0 = 6; // OK
    
  2. 상수 포인터

    상수 포인터가 변수를 가리키면 다른 변수를 가리킬 수 없습니다.

    int var1 = 1;
    int var2 = 0;
    
    int *const ptr2 = &var1;
    ptr2 = &var2; // Error
    
  3. 상수 포인터

    가리키는 변수의 값을 변경할 수 없는 포인터를 상수 포인터라고 합니다.

    int const * ptr3 = &var2;
    *ptr3 = 4; // Error
    
  4. 상수 포인터

    상수에 대한 상수 포인터는 가리키는 주소를 변경할 수 없고 해당 주소에 유지되는 값도 변경할 수 없는 포인터입니다.

    int var3 = 0;
    int var4 = 0;
    const int * const ptr4 = &var3;
    *ptr4 = 1;     // Error
     ptr4 = &var4; // Error
    

으로는 '이렇게 하다'가입니다.const키워드는 바로 앞에 있는 키워드에 적용됩니다.: " " , "const다음 사항에 적용됩니다.

  • const int* is is is is is와 int const*"상수 int에 대한 대응"을 의미합니다.
  • const int* const is is is is is와 int const* const"상수 int에 대한 포인터 표시"를 의미합니다.

편집: Dos와 Don'ts에 대해 이 답변으로 충분치 않다면 원하는 것을 좀 더 정확하게 말씀해 주시겠습니까?

이 질문은 내가 왜 일을 하는 것을 좋아하는지 정확히 보여준다. 내 질문에서 언급한 방법은 유형 ID 허용 항상이다.

요컨대, 규칙을 기억하는 가장 쉬운 방법은 "상수"가 적용되는 것을 쫓는다는 입니다.따라서 질문에서 "int const *"는 int가 일정함을 의미하고 "int * const"는 포인터가 일정함을 의미합니다.

만약 누군가가 그것을 맨 앞에 두기로 결정한다면(예: "const int *") 그것은 그 뒤에 있는 것에 적용된다.

많은 사람들은 그 특별한 예외가 더 멋져 보인다고 생각하기 때문에 그것을 사용하는 것을 좋아한다.나는 그것이 싫습니다. 왜냐하면 그것은 예외이기 때문에 혼란스럽기 때문입니다.

C 및 C++ 선언 구문은 원래 설계자에 의해 실패한 실험으로 반복적으로 설명되었습니다.

대신 타입의 이름을 "point to"로 지정합니다.Type "; "; "라고.Ptr_:

template< class Type >
using Ptr_ = Type*;

, 이제Ptr_<char>는 포인터입니다.char.

Ptr_<const char>는 포인터입니다.const char.

★★★★★★★★★★★★★★★★★.const Ptr_<const char>는 입니다.const를 지정합니다.const char.

C++ Guru Scott Meyers의 이 을 접하기 전까지는 나도 너와 같은 의심을 가지고 있었어.이 책의 세 번째 항목을 참조하십시오. 이 항목에서는 이 문서의 사용 방법에 대해 자세히 설명합니다.const.

이 조언에 따르세요.

  1. " " "가" '''일 ''const왼쪽에 되어 있습니다.
  2. " " "가" '''일 ''const아스타리스크 에 표시되어 는 일정합니다.
  3. ifconst, 둘 다 하게 나타납니다.

「 」의 const.

가장 간단한 방법은 명명된 상수를 선언하는 것입니다.하되, 를 더하면 .const에.물론 나중에 값을 설정할 수 없기 때문에 즉시 생성자에서 초기화할 필요가 있습니다.예를 들어 다음과 같습니다.

const int Constant1=96; 

는, 을 초월하는 상수를 합니다.Constant1. , 96 입니다.

이러한 상수는 프로그램에서 사용되지만 프로그램 컴파일 후 변경할 필요가 없는 파라미터에 유용합니다. C보다 합니다.#define명령어는 메인 컴파일러에 도달하기 전에 프리프로세서에 의해 프로그램 텍스트로 대체되는 것이 아니라 컴파일러 자체에 의해 이해되고 사용되기 때문에 오류 메시지가 훨씬 더 유용합니다.

.const포인터 또는 포인터가 가리키는 것이 상수인지 또는 둘 다인지를 판별합니다.예를 들어 다음과 같습니다.

const int * Constant2 

선언하다Constant2상수 정수에 대한 변수 포인터입니다.

int const * Constant2

는 같은 기능을 하는 대체 구문입니다만,

int * const Constant3

선언하다Constant3입니다.

int const * const Constant4

선언하다Constant4는 상수 정수에 대한 상수 포인터입니다.기본적으로 '상수'는 바로 왼쪽에 있는 모든 것에 적용된다(직접 오른쪽에 있는 모든 것에 적용되는 경우가 없는 경우는 제외).

참조: http://duramecho.com/ComputerInformation/WhyHowCppConst.html

는 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★const, 즉, 즉, 즉, 즉, 즉, 즉, i, i, i, i, i, i, i, i, i, i, i i, i, i, i, i, i, i, i, i, to, to, to, to, , to, , to, to, to, to,*진짜 의미를 알아내는 데 도움이 됩니다.

  1. A const*가 「」인 .const★★★★★★ 。

  2. A const★★★★★★의 *가 RP(R)인 .const포인터

다음 표는 Stanford CS106L Standard C++ Programming Laboratory Course Reader에서 가져온 것입니다.

여기에 이미지 설명 입력

  • const의 왼쪽에 있다*어느 을const int ★★★★★★★★★★★★★★★★★」int const)
  • const오른쪽에 있다*
  • 동시에 둘 다일 수 있다

점 : ★★★★★★★★★★★★★★★★★★★★:const int *p 당신이 언급하고 있는 값이 일정하다는 것을 의미하는 것은 아닙니다!!, 해당 포인터를 통해 변경할 수 없습니다($*p = ...'을 할당할 수 없습니다).값 자체는 다른 방법으로 변경될 수 있습니다.

int x = 5;
const int *p = &x;
x = 6; //legal
printf("%d", *p) // prints 6
*p = 7; //error 

이는 함수가 전달된 인수를 실수로 변경하지 않도록 함수의 시그니처에서 주로 사용됩니다.

양쪽에 int가 있는 const는 constant int에 대한 포인터를 만듭니다.

const int *ptr=&i;

또는 다음과 같이 입력합니다.

int const *ptr=&i;

const 후에*int에 대한 포인터가 계속 생성됩니다.

int *const ptr=&i;

이 경우 모두 상수 정수에 대한 포인터이지만 상수 포인터는 아닙니다.

 const int *ptr1=&i, *ptr2=&j;

이 경우 모두 정수 포인터이고 ptr2는 정수 포인터입니다.그러나 ptr1은 상수 포인터가 아닙니다.

int const *ptr1=&i, *const ptr2=&j;

단순 니모닉:

type 포 pointer <-* -> 포인트name


나는 생각하기를 좋아한다.int *i.iint에서;;;;;;;;;;;;;;;;;;;;;;;;;;;;;,const int *i' 정도'는 '어느 정도'라는iconst int ", ", ",int *const i'하다'는 '하다'라는 const iint

편애()로 수 .int const *i사람들이 싫어할 수도 있고 허용하지 않을 수도 있는 선언 스타일)

  1. const int*에 대한 - 상수에 대한 포인터int★★★★★★ 。

할 수 포인터의 할 수 .int는 .object를.


  1. const int * const - 상수 포인터 - 상수 포인터int★★★★★★ 。

이나 포인터의 할 수 .int포인터가 가리키는 오브젝트


  1. int const *에 대한 - 상수에 대한 포인터int★★★★★★ 。

1에 합니다.const int* 할 수 - 는 변경할 수 .int는 .object를.


실제로 네 번째 옵션이 있습니다.

  1. int * const에 고정 - 에 대한 고정 포인터int★★★★★★ 。

포인터가 가리키는 객체의 값은 변경할 수 있지만 포인터 자체의 값은 변경할 수 없습니다. 것을 .int단, 이값, 이 값int오브젝트를 변경할 수 있습니다.


특정 유형의 C 또는 C++ 구문을 찾으려면 데이비드 앤더슨이 만든 시계방향/나선형 법칙을 사용할 수 있지만 로스 J. 앤더슨이 만든 앤더슨의 법칙과 혼동해서는 안 된다.

많은 분들이 정답을 맞췄습니다.여기서 정리를 잘해서 답변에 없는 추가 정보를 넣겠습니다.

Const는 한정자라고도 불리는 C 언어 키워드입니다.변수 선언에 Const를 적용하여 값이 변경되지 않도록 지정할 수 있습니다.

const int a=3,b;

a=4;  // give error
b=5;  // give error as b is also const int 

you have to intialize while declaring itself as no way to assign
it afterwards.

읽는 법

모든 문장을 오른쪽에서 왼쪽으로 읽는 것만으로 원활하게 작동한다.

3가지 주요 사항

type a.    p is ptr to const int

type b.    p is const ptr to int 
 
type c.    p is const ptr to const int

[오류]

if * comes before int 

두 종류

1. const int *

2. const const int *

우리가 먼저 본다

메이저 타입 1. const int*

3개소에서 3개 정리하는 방법 3개!=6

i. * 시작 시

*const int p      [Error]
*int const p      [Error]

ii. 시작 시 설정

const int *p      type a. p is ptr to const int 
const *int p      [Error]

iii. 시작 시 int

int const *p      type a. 
int * const p     type b. p is const ptr to int

메이저 타입 2. const int*

4개의 물건을 4개의 장소에 배치하는 방법 2개가 같은 4!/2!=12

i. * 시작 시

* int const const p     [Error]
* const int const p     [Error]
* const const int p     [Error]
 

ii. 시작 시 int

int const const *p      type a. p is ptr to const int
int const * const p     type c. p is const ptr to const int
int * const const p     type b. p is const ptr to int

iii. 시작 시 건설

const const int *p     type a.
const const * int p    [Error]

const int const *p      type a.
const int * const p     type c.

const * int const p    [Error]
const * const int p    [Error]

올인원

a를 입력합니다.ptr은 int(5)를 const하기 위한 ptr입니다.

const int *p
int const *p

int const const *p
const const int  *p
const int  const *p

b. p는 const ptr to int (2)

int * const p
int * const const p;

c. p는 const ptr to const int (2)

int const * const p
const int * const p

아주 적은 계산

1. const int * p        total arrangemets (6)   [Errors] (3)
2. const const int * p  total arrangemets (12)  [Errors] (6)

리틀 엑스트라

int const * p,p2;

here p is ptr to const int  (type a.) 
but p2 is just const int please note that it is not ptr

int * const p,p2;

similarly 
here p is const ptr to int  (type b.)   
but p2 is just int not even cost int

int const * const p,p2;

here p is const ptr to const int  (type c.)
but p2 is just const int. 

끝났습니다

이는 주로 두 번째 줄인 베스트 프랙티스, 할당, 함수 파라미터 등에 대처합니다.

일반적인 연습입니다. 것을 만들어 보세요.const아, 아, 아, 아, 아, 아, 아, 아, 아. 다른, 모든 것을 , 모든 것을 만들어라.const먼저, 그리고 나서 정확히 최소 세트를 제거합니다.const프로그램을 작동시키기 위해 필요합니다.이것은 항상 정확성을 확보하는 데 큰 도움이 되며, 수정하지 말아야 할 것에 사람들이 할당하려고 할 때 미묘한 버그가 발생하지 않도록 하는 데 도움이 됩니다.

'const_cast' 'const_cast'이에 대한 합법적인 사용 사례는 한두 가지가 있지만, 매우 적습니다.const한 사람을 더 잘 될 const어떻게 해야 할지에 대한 합의에 도달하기 위해 그들과 그 문제를 논의해야 한다.

하지 않은 에만 할당할.일정하지 않은 경우에만 할당할 수 있습니다.일정한 것에 할당하는 경우는, 상기를 참조해 주세요.에는 이 점에 .int const *foo; ★★★★★★★★★★★★★★★★★」int * const bar;const 그 하지 않겠습니다 - 설명하지 않겠습니다.

함수 파라미터:

value:예: Pass by value: 예 。void func(int param)콜 사이트에서는 어느 쪽이든 상관하지 않습니다.을 '사용하다'라고 선언하는 할 수 있습니다.void func(int const param) 콜될 수 .

reference : ( 에에에 pass pass : )void func(int &param)을 사용하다 선언한 func할 수 .param모든 콜 사이트는 그 결과에 대처할 준비가 되어 있어야 합니다.을 " "로 변경"void func(int const &param)합니다.func은 바꿀 수 param전달되는 것은 다시 나오는 것을 의미합니다.다른 사람들이 지적했듯이, 이것은 여러분이 바꾸고 싶지 않은 큰 물체를 저렴하게 통과할 때 매우 유용합니다.참조를 전달하는 것이 큰 개체를 값으로 전달하는 것보다 훨씬 저렴합니다.

pointer: Pass by pointer: 예 。void func(int *param) ★★★★★★★★★★★★★★★★★」void func(int const *param)이며, 가 「2」의 체크가 필요하게 되어, 「2」의 있습니다.nullptr 이 없는 한funcnullptrparam.

아!이런 경우에 옳음을 증명하는 것은 끔찍할 정도로 어렵다. 단지 실수하기 너무 쉽다. 포인터 해 주세요.nullptr긴 안목으로 보면 고통과 고통을 덜 수 있고 벌레를 찾기 어려울 것입니다.또한 체크 비용은 매우 저렴하며 컴파일러에 내장된 정적 분석으로 관리할 수 있는 경우에는 옵티마이저가 어떻게든 회피합니다.MSVC의 경우 Link Time Code Generation, GCC의 경우 WOPR(내 생각에)을 켜면 소스 코드 모듈 경계를 넘는 함수 호출에서도 프로그램 전체에 걸쳐 사용할 수 있습니다.

결국 위의 모든 것이 포인터보다 항상 참조를 선호하도록 매우 확실한 근거를 제시합니다.사방이 더 안전할 뿐이지

C++에 대해서는 확실치 않지만, C의 완성도를 높이기 위해 다른 설명을 따릅니다.

  • pp - 포인터에 대한 포인터
  • p - 포인터
  • - , 를 들어 data - 지적된 것x
  • 굵은 글씨 - 읽기 전용 변수

포인터

  • data - p 이터 - -int *p;
  • p 데이터 -int const *p;
  • p 데이터 -int * const p;
  • pdata -int const * const p;

포인터에 대한 포인터

  1. - ppp 데이터 -int **pp;
  2. ppp 데이터 -int ** const pp;
  3. ppp 데이터 -int * const *pp;
  4. ppp 데이터 -int const **pp;
  5. ppp 데이터 -int * const * const pp;
  6. ppp 데이터 -int const ** const pp;
  7. pp pdata -int const * const *pp;
  8. pppdata -int const * const * const pp;
// Example 1
int x;
x = 10;
int *p = NULL;
p = &x;
int **pp = NULL;
pp = &p;
printf("%d\n", **pp);

// Example 2
int x;
x = 10;
int *p = NULL;
p = &x;
int ** const pp = &p; // Definition must happen during declaration
printf("%d\n", **pp);

// Example 3
int x;
x = 10;
int * const p = &x; // Definition must happen during declaration
int * const *pp = NULL;
pp = &p;
printf("%d\n", **pp);

// Example 4
int const x = 10; // Definition must happen during declaration
int const * p = NULL;
p = &x;
int const **pp = NULL;
pp = &p;
printf("%d\n", **pp);

// Example 5
int x;
x = 10;
int * const p = &x; // Definition must happen during declaration
int * const * const pp = &p; // Definition must happen during declaration
printf("%d\n", **pp);

// Example 6
int const x = 10; // Definition must happen during declaration
int const *p = NULL;
p = &x;
int const ** const pp = &p; // Definition must happen during declaration
printf("%d\n", **pp);

// Example 7
int const x = 10; // Definition must happen during declaration
int const * const p = &x; // Definition must happen during declaration
int const * const *pp = NULL;
pp = &p;
printf("%d\n", **pp);

// Example 8
int const x = 10; // Definition must happen during declaration
int const * const p = &x; // Definition must happen during declaration
int const * const * const pp = &p; // Definition must happen during declaration
printf("%d\n", **pp);

N레벨의 기준해제

계속 가, 하지만 인류는 당신을 파문할 것이다.

int x = 10;
int *p = &x;
int **pp = &p;
int ***ppp = &pp;
int ****pppp = &ppp;

printf("%d \n", ****pppp);

C++에는 항상 정확성을 둘러싼 다른 미묘한 점들이 많이 있습니다.여기서의 질문은 단순히 C에 관한 것이라고 생각합니다만, 태그가 C++이기 때문에 관련된 예를 몇 가지 제시하겠습니다.

  • 큰 , 하다, 하다, 하다, 하다, 하다.TYPE const &그러면 오브젝트가 수정되거나 복사되지 않습니다. 예:

    TYPE& TYPE::operator=(const TYPE &rhs) { ... return *this; }

    ★★★★★★★★★★★★★★★★★.TYPE & const참조는 항상 일정하기 때문에 의미가 없습니다.

  • 메서드는 라벨로 .const 않으면 할 수 TYPE const &예:

    bool TYPE::operator==(const TYPE &rhs) const { ... }

  • 반환값과 메서드가 모두 일정해야 하는 일반적인 상황이 있습니다.예:

    const TYPE TYPE::operator+(const TYPE &rhs) const { ... }

    실제로 const 메서드는 내부 클래스 데이터를 non-const에 대한 참조로 반환해서는 안 됩니다.

  • 그 결과, 많은 경우 상수 오버로드를 사용하여 상수 및 비 상수 방법을 모두 생성해야 합니다.를 들어, 「」를 하면,T const& operator[] (unsigned i) const; ''가 '' 거예요

    inline T& operator[] (unsigned i) { return const_cast<char&>( static_cast<const TYPE&>(*this)[](i) ); }

C에는 const 함수가 없고, 비멤버 함수는 C++에서 const할 수 없으며, const 메서드는 부작용이 있을 수 있으며, 컴파일러는 중복 함수 호출을 피하기 위해 const 함수를 사용할 수 없습니다.사실, 심지어 간단한 것조차int const &참조가 참조하는 값이 다른 곳에서 변경될 수 있습니다.

언급URL : https://stackoverflow.com/questions/1143262/what-is-the-difference-between-const-int-const-int-const-and-int-const

반응형