const BYTE *和const LPBYTE

时间:2014-02-09 18:59:32

标签: c++ c winapi types

似乎'const BYTE *'和'之间存在差异'const LPBYTE',当我编译下面的代码时(只是一个例子):

void Test(const BYTE * c,const LPBYTE d) {
 c++; // OK
*c++; // OK
 d++; // ERROR
*d++; // ERROR

}

我在visual studio上得到“你不能分配给const的变量”,我在代码块上尝试了它,并且我得到了“只读参数'd'的增量”。我也使用了typedef BYTE* bytes,但也遇到了同样的错误。

这里有什么,为什么我可以修改'c'而不是'd'?

2 个答案:

答案 0 :(得分:6)

你应该知道以下两种数据类型的区别('*'的确切位置):

char const *variable_1;
char *const variable_2;

“variable_1”是指向只读字节的指针。但是“variable_1”本身不是只读的。

“variable_2”是指向字节的只读指针。但是它指向的字节不是只读的。

这意味着:

variable_1 = &xxx; // OK
variable_2 = &xxx; // Error
*variable_1 = yyy; // Error
*variable_2 = yyy; // OK

现在上述两种类型的含义如下:

const BYTE *   ==   BYTE const *
const LPBYTE   ==   BYTE * const

答案 1 :(得分:1)

const LPBYTE是指向字节的常量指针,而不是指向const byte的指针。您只需要了解*职位