【发布时间】:2014-09-09 21:45:16
【问题描述】:
我从下面的函数中得到一个编译器“警告:从指针目标类型返回丢弃限定符”。
unsigned char* getBeginning(const unsigned char * Packet)
{
return Packet+3;
}
我在 SO 和其他地方对此进行了研究,似乎编译器抱怨说,虽然我接受了一个 const 指针,但我返回了一个非常量指针。
我想要完成的是:
1) 我想让用户知道我不会在这个函数中更改他们的任何数据,因此是 const。
2) 但是,后面的函数会使用此处返回的指针进行更改,所以我不想将返回类型也设为 const。
在我没有收到警告的情况下,有没有更好的方法来做到这一点?我还在学习 C。
【问题讨论】:
-
您确定要删除
const吗?这听起来是个坏主意…… -
@sircodesalot:对于这种情况,这是一个常见的 C 习惯用法(替代方法是编写两个函数(一个用于
const,一个用于非const),或者只编写一个非-const版本并让调用者将const扔掉),参见。strchr. -
感谢您的回答!阅读回复后,我可能完全错了。我打算让用户给我一个 unsigned char *。它不必是 const unsigned char *。我想我可以在函数定义中使用“const”来表明我不会修改指向这个特定函数的数据。所以,换句话说,我不希望用户给我一个 const unsigned char *,我只是想告诉他们我不会在这里碰 unsigned char *。稍后,返回的指针确实会修改数据。有没有更好的方法来做到这一点?