/*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 <<出现乱码?为什么我必须把它变成无效*?
感谢您对初学者问题的耐心等待.
因为'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,它只是因为我的堆栈组织方式而起作用.不要使用这是真正的代码.