1

反復しようとしている const char arr[] パラメータがあります。

char *ptr;
for (ptr= arr; *ptr!= '\0'; ptr++) 
  /* some code*/

エラーが表示されます: 割り当てにより、ポインター ターゲット型から修飾子が破棄されます

const char [] は非 const とは異なる方法で処理されますか?

4

4 に答える 4

11

*ptr の宣言を に切り替えます。

const char* ptr;

問題は、本質的に const char* を char* に割り当てていることです。const から非 const に移行するため、これは const の違反です。

于 2008-11-02T21:20:54.553 に答える
10

JaredPar が言ったように、ptr の宣言を次のように変更します。

const char* ptr;

そして、それはうまくいくはずです。意外に見えますが (const ポインターを反復するにはどうすればよいでしょうか?)、実際には、ポイント先の文字は const であり、ポインター自体ではないと言っています。実際、ポインタ宣言で const (および/または volatile) を適用できる場所が 2 つあります。4 つの順列のそれぞれの意味はわずかに異なります。オプションは次のとおりです。

char* ptr;              // Both pointer & pointed-to value are non-const
const char* ptr;        // Pointed-to value is const, pointer is non-const 
char* const ptr;        // Pointed-to value is non-const, pointer is const
const char* const ptr;  // Both pointer & pointed-to value are const.

誰か (Scott Meyers だと思います) は、ポインター宣言を裏返しに読むべきだと言いました。

const char* const ptr;

...「ptrは、定数である文字への定数ポインタです」と読み取られます。

幸運を!

ドリュー

于 2008-11-02T21:38:29.900 に答える
0

const 宣言は、左側にあるものをすべて取得します。何もなければ正しく見えます。

于 2013-10-16T17:18:34.613 に答える