当常量指针用作函数的参数时

when const pointer is used as parameter of function

本文关键字:参数 函数 常量 指针      更新时间:2023-10-16

整个代码在链接下方。 C++ 中的 base64 解码片段 我对上述链接代码中的常量指针有疑问。

主要

std::vector<BYTE> myData;
...
std::string encodedData = base64_encode(&myData[0], myData.size());

base64_encode

std::string base64_encode(BYTE const* buf, unsigned int bufLen) {
std::string ret;
int i = 0;
int j = 0;
BYTE char_array_3[3];
BYTE char_array_4[4];
while (bufLen--) {
char_array_3[i++] = *(buf++);
if (i == 3) {

参数是 BYTE const* buf,而不是 const BYTE* buf。

当 const BYTE* buf 用作参数时, const 用于 BYTE,因此指针可以更改,但缓冲区的值不能更改。

当使用 BYTE const* buf 时,const 用于指针变量,因此可以更改值,但不能更改地址。

在上面的代码中, buf 指针是常量,但 buf++ 可能吗?

为什么使用 BYTE const* buf而不是 const BYTE* buf?

谢谢

令人困惑的是,const BYTE*BYTE const*是等价的。 两者都是指向常量的指针。

为了使指针本身恒定,公式是BYTE *const。 常量指针指向常量将是BYTE const *constconst BYTE *const

我无法推测为什么此功能的作者选择了BYTE const*版本而不是更流行的const BYTE*