我有一个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),其中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是一个指向常量字符的常量指针".
祝好运!
德鲁