C: 编译器警告 "return discards qualifiers from pointer target type"

标签 c pointers constants

我从下面的函数中收到编译器“警告:返回丢弃来自指针目标类型的限定符”。

unsigned char* getBeginning(const unsigned char * Packet)
{
                    return Packet+3;
}

我已经在 SO 和其他地方对此进行了研究,编译器似乎在提示虽然我接受了一个 const 指针,但我返回了一个非 const 指针。

我想要完成的是:

1) 我想让用户知道我不会在此函数中更改他们的任何数据,因此不会更改常量。

2) 但是,后面的函数会使用这里返回的指针进行更改,所以我不想让我的返回类型也为const。

在我没有收到警告的情况下,是否有更好的方法来执行此操作?我还在学习 C。

最佳答案

C 没有从 const 限定指针类型到非 const 限定指针类型的隐式转换,因此您应该添加一个显式转换,即强制转换。然后警告将消失:

unsigned char* getBeginning(const unsigned char * Packet)
{
                    return (unsigned char *)Packet+3;
}

请注意,此函数有点“危险”,因为它可以隐藏 const 限定符的删除。但它并不比标准库中的 strchr 更危险。只要您不尝试通过返回的指针修改 const 限定的对象,该行为就已完美定义。

关于C: 编译器警告 "return discards qualifiers from pointer target type",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24830335/

相关文章:

c - 这个循环有什么问题?

c++ - 智能感知自动转换(点到箭头)

c++ - 指针分配给了错误的局部变量

c++ - 为什么我可以改变 const 对象中的成员变量,这是返回 const 对象函数的结果?

c++ - 为什么不能用另一个指向 const char 的指针来初始化一个指针?

c++ - C++中的Const运算符重载问题

c++ - 有条件的 CMAKE 链接到 rt-library

c - 如何从字符字符串(位于字符字符串数组中)中删除最后一个字符

java - 当您需要创建一个指向变量的指针时,为什么指针可以节省内存?

java - 为什么用某些编译器编译的程序可以被反编译而其他的(实际上)不能?