char,指针,演员和字符串问题

Shr*_*ers 3 c++ pointers

/*1*/ const char *const letter = 'A';

/*2*/ const char *const letter = "Stack Overflow";
Run Code Online (Sandbox Code Playgroud)

为什么1无效但2有效?

letter是一个需要分配地址的指针.被引用的字符串地址?我假设这就是为什么#2有效并且单引号字符串不被视为地址的原因?

另外,这两种铸造类型有什么区别?:

static_cast<>().

最后,如果var是一个char变量,为什么cout <<&var <<出现乱码?为什么我必须把它变成无效*?

感谢您对初学者问题的耐心等待.

pax*_*blo 8

因为'A'不是指针,如果基础字符集是ASCII ,则它是a char,65或41 16.

"Stack"另一方面,字符串,基本上是字符数组{'S', 't', 'a', 'c', 'k', '\0'},它降级为指向其第一个字符的指针.

static_cast()" 之间的区别"已在这里得到解答,远远超过我的能力.

你得到垃圾的原因char var = 'x'; cout << &var ...是因为它&var是一个char *意味着它被视为一个字符串 - 在这种情况下,cout输出字符直到最后的nul字符\0不存在,或者超出字符.以下代码显示了这一点:

#include <iostream>
int main() {
    //int q1 = 0;
    char xx = 'x';
    //int q2 = 0;
    std::cout << &xx << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

x~Í"
Run Code Online (Sandbox Code Playgroud)

当您取消注释行时q,它会起作用,因为它会在角色周围放置零,x并自行输出).请记住,这不是犹太人C,它只是因为我的堆栈组织方式而起作用.不要使用这是真正的代码.