当const指针用作函数的参数时

时间:2019-08-30 01:30:14

标签: c++ pointers arguments const

整个代码在链接下方。 base64 decode snippet in c++ 我在上面的链接代码中有一个关于const指针的问题。

主要

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,因此可以更改指针,但不能更改buffer的值。

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

在上面的代码中, buf指针是const,但是buf ++可以吗?

为什么使用BYTE const * buf代替const BYTE * buf?

谢谢

1 个答案:

答案 0 :(得分:1)

const BYTE*BYTE const* are equivalent to each other令人困惑。两者都是指向常量的指针。

要使指针本身为常量,公式为BYTE *const。指向const的const指针将为BYTE const *constconst BYTE *const

我无法推测该函数的作者为什么选择BYTE const*版本而不是流行的const BYTE*