C++ cout-deference(unsigned char)指针,给我意外的结果

C++ cout-deference(unsigned char)指针,给我意外的结果,c++,C++,我需要看一看声明的无符号字符指针中的内容,我将问题简化为这个简短的示例 #include<iostream> int main (int argc, char *argv[]) { unsigned char * buffer = new unsigned char; *buffer = 8; std::cout << "buffer = " << (unsigned char) (*buffer) << std::endl

我需要看一看声明的无符号字符指针中的内容,我将问题简化为这个简短的示例

#include<iostream>
int main (int argc, char *argv[])
{
    unsigned char * buffer = new unsigned char;
    *buffer = 8;
    std::cout << "buffer = " << (unsigned char) (*buffer) << std::endl;
}
#包括
int main(int argc,char*argv[])
{
无符号字符*缓冲区=新的无符号字符;
*缓冲区=8;

std::cout
'8'
是字符8。
8
只是一个不可见字符的代码


尝试编写
*buffer=48;
并根据此猜测为什么输出为“buffer=0”。

如果我们稍微扩展一下您的示例:

int main(int argc, char *argv[]) {
    unsigned char * buffer = new unsigned char;
    *buffer = 8;
    std::cout << "buffer = [" << (*buffer) << "]\n";
}
ASCII字符8表示退格,它已将开头的
[
去掉。 请注意,您不需要强制转换为无符号字符-
*buffer
是一个无符号字符

如果希望它具有字符
'8'
,则需要将其内容设置为8。 不要忘记
删除你的
新内容

int main(int argc, char *argv[]) {
    unsigned char * buffer = new unsigned char;
    *buffer = '8'; //<---- see the single quotes?
    std::cout << "buffer = [" << (*buffer) << "]\n";
    delete buffer;
}
当然,我们并不真正需要这些指针:

int main(int argc, char *argv[]) {
    unsigned char buffer = '8';
    std::cout << "buffer = [" << buffer << "]\n";
}

刚刚找到此未签名()

#include<iostream>
int main (int argc, char *argv[])
{
    unsigned char * buffer = new unsigned char;
    *buffer = 8;
    std::cout << "buffer = " << unsigned(*buffer) << std::endl;
}
#包括
int main(int argc,char*argv[])
{
无符号字符*缓冲区=新的无符号字符;
*缓冲区=8;

cout 8是第8个字符,不是字符8@mahmoud您不是
cout
ing
unsigned char
指针。请修复标题。@LogicStuff:是的。
*buffer
是一个
unsigned char
,而
unsigned char)(*buffer)
绝对是一个
无符号字符
@barakmanos不是指针。我应该突出显示它。内存泄漏不应该是这个MCVE的一部分。@LogicStuff:是的,确实不是指针。或者可能是一个退格:建议人类清楚的代码如何?没有魔法numbers@doctorlove.绝对是退格,我不知道我记不太清楚我的ASCII码了。我查过了。@mahmoudfathy是的,它是一个字节的数字,这就是字符过去(现在仍然是)的样子在大多数平台上编码。内存中的字符只是一个字节,我链接的表让您知道什么数字被解释为什么字符。运算符
是C样式转换为
无符号int
(出于历史原因,名称的
int
部分是可选的)。
buffer = [8]
int main(int argc, char *argv[]) {
    unsigned char buffer = '8';
    std::cout << "buffer = [" << buffer << "]\n";
}
int main(int argc, char *argv[]) {
    unsigned char buffer = 56;
    std::cout << "buffer = [" << buffer << "]\n";
}
int main(int argc, char *argv[]) {
    unsigned char buffer = 56;
    std::cout << "buffer = [" <<static_cast<unsigned int>(buffer) << "]\n";
}
#include<iostream>
int main (int argc, char *argv[])
{
    unsigned char * buffer = new unsigned char;
    *buffer = 8;
    std::cout << "buffer = " << unsigned(*buffer) << std::endl;
}