反復しようとしている const char arr[] パラメータがあります。
char *ptr;
for (ptr= arr; *ptr!= '\0'; ptr++)
/* some code*/
エラーが表示されます: 割り当てにより、ポインター ターゲット型から修飾子が破棄されます
const char [] は非 const とは異なる方法で処理されますか?
*ptr の宣言を に切り替えます。
const char* ptr;
問題は、本質的に const char* を char* に割り当てていることです。const から非 const に移行するため、これは const の違反です。
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は、定数である文字への定数ポインタです」と読み取られます。
幸運を!
ドリュー
const 宣言は、左側にあるものをすべて取得します。何もなければ正しく見えます。