繁体   English   中英

指针和const char []导致C错误

[英]C error with pointer and const char[]

我有一个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是指向常量字符的常量指针”。

祝好运!

德鲁

const声明获取左侧的所有内容。 如果什么也没有,那么看起来不错。

对于像上面这样的交互循环,您不关心返回的值,应该说++ptr而不是ptr++

ptr++意思是:

temp = *ptr;
++ptr;
return temp;`

++ptr意思是:

++ptr;
return *ptr;

对于原始类型,编译器将应用此优化,但在C ++对象上进行迭代时则不会应用此优化,因此您应养成以正确方式编写它的习惯。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM