std::cout 如何使用 char 指针?
How does std::cout work with char pointers?
最近在学习C++的指针,对char有点迷茫
char *c = "sampletext";
cout<< *c <<endl;
cout<< c <<endl;
cout<< &c <<endl;
更准确地说:为什么 cout<< c <<endl;
打印整个 C 字符串而不是地址(因为它发生在 int 指针中),例如,
以及为什么 cout<< *c <<endl;
打印第一个字母而不是整个 C 字符串。提前谢谢你
发生这种情况是因为编译器检查参数的类型并调用接收该类型的运算符的重载版本。
在 C 语言中,字符串被实现为 char
以 ’[=12=]’
(nul) 字符终止的数组,并且使用指针引用数组。因此,当接收到的参数是 c
时,接收到 char*
的重载运算符打印数组的内容直到 nul 终止符。
当接收到的参数是 *c
时,这会取消引用指针以访问其数据,并且由于这是指向 char
的指针,因此接收 char
的重载运算符会打印它作为单个 char
.
要打印字符串数组的地址,可以将char*
指针转换为void*
,如下所示:
std::cout << (void*) c << std::endl;
最近在学习C++的指针,对char有点迷茫
char *c = "sampletext";
cout<< *c <<endl;
cout<< c <<endl;
cout<< &c <<endl;
更准确地说:为什么 cout<< c <<endl;
打印整个 C 字符串而不是地址(因为它发生在 int 指针中),例如,
以及为什么 cout<< *c <<endl;
打印第一个字母而不是整个 C 字符串。提前谢谢你
发生这种情况是因为编译器检查参数的类型并调用接收该类型的运算符的重载版本。
在 C 语言中,字符串被实现为 char
以 ’[=12=]’
(nul) 字符终止的数组,并且使用指针引用数组。因此,当接收到的参数是 c
时,接收到 char*
的重载运算符打印数组的内容直到 nul 终止符。
当接收到的参数是 *c
时,这会取消引用指针以访问其数据,并且由于这是指向 char
的指针,因此接收 char
的重载运算符会打印它作为单个 char
.
要打印字符串数组的地址,可以将char*
指针转换为void*
,如下所示:
std::cout << (void*) c << std::endl;