C错误讯息。我有一个const char ARR []我试图遍历参数,与指针为const char []
char *ptr;
for (ptr= arr; *ptr!= '\0'; ptr++)
/* some code*/
我得到一个错误:分配丢弃了指针目标类型的限定
const char []的处理方式与非const不同?
C错误讯息。我有一个const char ARR []我试图遍历参数,与指针为const char []
char *ptr;
for (ptr= arr; *ptr!= '\0'; ptr++)
/* some code*/
我得到一个错误:分配丢弃了指针目标类型的限定
const char []的处理方式与非const不同?
将* ptr的声明切换为。
const char* ptr;
问题是你基本上是分配一个const char * char *。这是违反常量,因为你从一个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.
有人(我认为斯科特·迈尔斯)说,你应该阅读内而外的指针声明,即:
const char* const ptr;
...会被读成“PTR是一个常量指针到一个不变的角色“。
祝你好运!
Drew
const声明抓住了左边的任何东西。如果没有什么,它看起来是正确的。
对于像上面那样的交互循环,您不关心返回的值,应该说++ptr
而不是ptr++
。
ptr++
表示:
temp = *ptr;
++ptr;
return temp;`
++ptr
表示:
++ptr;
return *ptr;
对于基本类型,编译器将应用这种优化的,但在C++对象将不进行遍历时,那么你应该在得到用正确的方式写它的习惯。
谢谢,这很有帮助。现在我只需要记住方法标记为常量时的含义...... – 2009-03-22 21:02:18