9

C での次の 3 つのポインター宣言の違いは何ですか:

void * const myPointer1;
void const *myPointer2;
const void *myPointer3;

そして、どちらが防止するために使用されます:

myPointer = somethingElse;
4

4 に答える 4

10

規則を右から左に読んでください。

void * const myPointer1;

myPointer1 は へのconstポインタvoidです。

void const *myPointer2;

myPointer2 は へのポインタconst voidです。

const void *myPointer3;

myPointer3 は へのポインタvoid constです。

結論:

  • myPointer1あなたが探しているものです - それはconstポインタなので、その値は変更できません
  • myPointer2myPointer3同じものです
  • myPointer2andmyPointer3は無意味です -- a を逆参照しvoid*ても意味がありません
于 2013-03-01T11:58:35.417 に答える
1

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を付けることです。これが、一貫して遵守できる唯一の「ルール」だからです。

于 2013-03-01T11:58:05.080 に答える
0
  1. void * const myPointer1;=myPointer1をvoidへのconstポインタとして宣言します
  2. void const *myPointer2;=myPointer3をvoidconstへのポインタとして宣言します
  3. const void *myPointer3;=myPointer3をconstvoidへのポインタとして宣言します

そのようなちょっとした疑問があるときはいつでも、あなたは使うことができます:: cdecl.org

myPointer1を試して、説明した状態を回避する必要がありconst pointerます。

于 2013-03-01T12:01:51.493 に答える
0
  • myPointer1へのconstポインタvoidです。
  • mypointer2myPointer3はどちらも へのポインタconst voidです。

myPointer2宣言と宣言の違いは、myPointer3単にスタイルの問題です。

注意:const voidは、ポイントされたデータが であることを意味しますconst。たとえばvoidからとは何の関係もありません。int main(void)

于 2013-03-01T11:54:13.467 に答える