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
포인터
시계/나선형 규칙에 대해 잘 모르는 경우: 변수 이름에서 시계 방향으로 이동합니다(이 경우 뒤로 이동). 다음 포인터 또는 입력으로 이동합니다.식이 끝날 때까지 반복합니다.
다음은 데모입니다.
에서는 이미에 대한 만, 은, .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;
의 astring
char * 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를 * 이전과 이후에 모두 사용할 수 있는 경우 값과 주소는 모두 일정합니다.
예.
int * const var; //여기서 주소는 상수입니다.
int const * var; //여기서 값은 상수입니다.
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
여기에서는 읽기 전용이며 선언과 정의는 같은 위치에 있어야 합니다.
상시 참조:
상수 변수(여기서는 int)에 대한 참조입니다.참조 크기가 실제 값보다 작기 때문에 주로 변수를 참조로 전달하지만, 실제 변수에 대한 별칭과 같은 부작용이 있습니다.에일리어스에 대한 완전한 접근을 통해 주 변수를 실수로 변경할 수 있으므로, 이러한 부작용을 방지하기 위해 일정하게 유지합니다.
int var0 = 0; const int &ptr1 = var0; ptr1 = 8; // Error var0 = 6; // OK
상수 포인터
상수 포인터가 변수를 가리키면 다른 변수를 가리킬 수 없습니다.
int var1 = 1; int var2 = 0; int *const ptr2 = &var1; ptr2 = &var2; // Error
상수 포인터
가리키는 변수의 값을 변경할 수 없는 포인터를 상수 포인터라고 합니다.
int const * ptr3 = &var2; *ptr3 = 4; // Error
상수 포인터
상수에 대한 상수 포인터는 가리키는 주소를 변경할 수 없고 해당 주소에 유지되는 값도 변경할 수 없는 포인터입니다.
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
.
이 조언에 따르세요.
- " " "가" '''일 ''
const
왼쪽에 되어 있습니다. - " " "가" '''일 ''
const
아스타리스크 에 표시되어 는 일정합니다. - if
const
, 둘 다 하게 나타납니다.
「 」의 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,*
진짜 의미를 알아내는 데 도움이 됩니다.
A
const
*
가 「」인 .const
★★★★★★ 。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
.i
int
에서;;;;;;;;;;;;;;;;;;;;;;;;;;;;;,const int *i
' 정도'는 '어느 정도'라는i
const int
", ", ",int *const i
'하다'는 '하다'라는 const i
int
편애()로 수 .int const *i
사람들이 싫어할 수도 있고 허용하지 않을 수도 있는 선언 스타일)
const int*
에 대한 - 상수에 대한 포인터int
★★★★★★ 。
할 수 포인터의 할 수 .int
는 .object를.
const int * const
- 상수 포인터 - 상수 포인터int
★★★★★★ 。
이나 포인터의 할 수 .int
포인터가 가리키는 오브젝트
int const *
에 대한 - 상수에 대한 포인터int
★★★★★★ 。
1에 합니다.const int*
할 수 - 는 변경할 수 .int
는 .object를.
실제로 네 번째 옵션이 있습니다.
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 ¶m)
을 사용하다 선언한 func
할 수 .param
모든 콜 사이트는 그 결과에 대처할 준비가 되어 있어야 합니다.을 " "로 변경"void func(int const ¶m)
합니다.func
은 바꿀 수 param
전달되는 것은 다시 나오는 것을 의미합니다.다른 사람들이 지적했듯이, 이것은 여러분이 바꾸고 싶지 않은 큰 물체를 저렴하게 통과할 때 매우 유용합니다.참조를 전달하는 것이 큰 개체를 값으로 전달하는 것보다 훨씬 저렴합니다.
pointer: Pass by pointer: 예 。void func(int *param)
★★★★★★★★★★★★★★★★★」void func(int const *param)
이며, 가 「2」의 체크가 필요하게 되어, 「2」의 있습니다.nullptr
이 없는 한func
수 nullptr
param
.
아!이런 경우에 옳음을 증명하는 것은 끔찍할 정도로 어렵다. 단지 실수하기 너무 쉽다. 포인터 해 주세요.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;
포인터에 대한 포인터
- - ppp 데이터 -
int **pp;
- ppp 데이터 -
int ** const pp;
- ppp 데이터 -
int * const *pp;
- ppp 데이터 -
int const **pp;
- ppp 데이터 -
int * const * const pp;
- ppp 데이터 -
int const ** const pp;
- pp pdata -
int const * const *pp;
- 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
'programing' 카테고리의 다른 글
MySQL에 있는 경우 업데이트하고 없는 경우 삽입(AKA "upsert" 또는 "Merge")하려면 어떻게 해야 합니까? (0) | 2022.12.21 |
---|---|
워드프레스를 위한 MariaDB 최적화 (0) | 2022.12.21 |
트리거 입력 버튼 클릭 (0) | 2022.12.21 |
문자열을 부울 php로 변환하는 방법 (0) | 2022.12.21 |
결과가 있어야 할 경우 PHP MySQL Query of View가 0 결과를 반환합니다. (0) | 2022.12.21 |