3

インタビューで聞かれました。右から左に読むという考えのように、私は解釈できます

char *const *p declares p as pointer to constant pointer of character.

その間

char * *const p declares p as a constant pointer to character pointer. 

しかし、これらの正確な意味がわからなかったので、確認してください。

4

3 に答える 3

5

char * const *pを指す文字ポインタはp変更できないことを意味します。

char arr[] = "";
char *ptr = arr;
char * const *p = &ptr;
**p = '\0';             // ok
*p = 0;                 // error
p = 0;                  // ok

char ** const pp変更できないことを意味します。

char arr[] = "";
char *ptr = arr;
char ** const p = &ptr;
**p = '\0';             // ok
p = 0;                  // error
*p = 0;                 // ok, ptr is now NULL
于 2013-06-26T08:33:53.983 に答える
3

cdeclを発見するまで、C で複雑なポインターを宣言するときに画面に頭をぶつけていました:)

char *const *p  // -> declare p as pointer to const pointer to char
char * *const p // -> declare p as const pointer to pointer to char

インストールすることもできます。

乾杯!

于 2013-06-26T08:38:01.673 に答える
0

次のコードを使用してこれをテストしました。

main()
{
  char *const *p;
  char **const q;

  **p = 'a';
  *p = *q;
  p = q;

  **q = 'a';
  *q = *p;
  q = p;
}

GCC は 7 行目と 12 行目、つまり*p = *qq = p. だからあなたは正しいようです。*p一定、q一定です。

(はい、初期化されていないポインターを逆参照しているため、プログラムの動作が未定義であることはわかっています。それはほとんど問題ではありません。

于 2013-06-26T08:33:56.367 に答える