当前位置:  开发笔记 > 编程语言 > 正文

指针和const char []的C错误

如何解决《指针和constchar[]的C错误》经验,为你挑选了2个好方法。

我有一个const char arr []参数,我试图迭代,

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

我收到一个错误:赋值从指针目标类型中丢弃限定符

const char []的处理方式与非const不同吗?



1> JaredPar..:

切换*ptr的声明为.

const char* ptr;

问题是你实际上是将一个const char*分配给一个char*.这是违反const的,因为你从const到非const.



2> Drew Hall..:

正如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是一个指向常量字符的常量指针".

祝好运!

德鲁

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有