C での次の 3 つのポインター宣言の違いは何ですか:
void * const myPointer1;
void const *myPointer2;
const void *myPointer3;
そして、どちらが防止するために使用されます:
myPointer = somethingElse;
C での次の 3 つのポインター宣言の違いは何ですか:
void * const myPointer1;
void const *myPointer2;
const void *myPointer3;
そして、どちらが防止するために使用されます:
myPointer = somethingElse;
規則を右から左に読んでください。
void * const myPointer1;
myPointer1 は へのconst
ポインタvoid
です。
void const *myPointer2;
myPointer2 は へのポインタconst
void
です。
const void *myPointer3;
myPointer3 は へのポインタvoid
const
です。
結論:
myPointer1
あなたが探しているものです - それはconst
ポインタなので、その値は変更できませんmyPointer2
とmyPointer3
同じものですmyPointer2
andmyPointer3
は無意味です -- a を逆参照しvoid*
ても意味がありませんconst
いくつかの場所では、宣言されているものの前に置くことができますconst
:
const int * x; // pointer to constant int
const と宣言されているものはいつでもconst
後に置くことができます。
int const * x; // pointer to constant int
int * const x; // constant pointer to int
int const * const x; // constant pointer to constant int
したがって、私の個人的な推奨事項は、常に末尾const
を付けることです。これが、一貫して遵守できる唯一の「ルール」だからです。
void * const myPointer1;
=myPointer1をvoidへのconstポインタとして宣言しますvoid const *myPointer2;
=myPointer3をvoidconstへのポインタとして宣言しますconst void *myPointer3;
=myPointer3をconstvoidへのポインタとして宣言しますそのようなちょっとした疑問があるときはいつでも、あなたは使うことができます:: cdecl.org
myPointer1を試して、説明した状態を回避する必要がありconst pointer
ます。
myPointer1
へのconst
ポインタvoid
です。 mypointer2
とmyPointer3
はどちらも へのポインタconst void
です。myPointer2
宣言と宣言の違いは、myPointer3
単にスタイルの問題です。
注意:const void
は、ポイントされたデータが であることを意味しますconst
。たとえばvoid
からとは何の関係もありません。int main(void)