C++ c+中的奇怪字符数组输出+;

C++ c+中的奇怪字符数组输出+;,c++,C++,我遇到了一个奇怪的问题。 在C中++ chars[]=“123abc89”; couts[0]是字符数组的第一个元素&s[0]是第一个元素的地址,与数组的地址相同。给定字符数组的起始地址,std::cout使用以下运算符重载打印从该地址开始的整个字符串s[0]是字符数组的第一个元素&s[0]是第一个元素的地址,与数组的地址相同。给定字符数组的起始地址,std::cout使用下面的重载操作符打印出从该地址开始的整个字符串,您正在了解C(和C++)如何处理字符串(而不是C++的std::string

我遇到了一个奇怪的问题。 在C中++

chars[]=“123abc89”;

cout
s[0]
是字符数组的第一个元素
&s[0]
是第一个元素的地址,与数组的地址相同。给定字符数组的起始地址,
std::cout
使用以下运算符重载打印从该地址开始的整个字符串
s[0]
是字符数组的第一个元素
&s[0]
是第一个元素的地址,与数组的地址相同。给定字符数组的起始地址,
std::cout
使用下面的重载操作符打印出从该地址开始的整个字符串,您正在了解C(和C++)如何处理字符串(而不是C++的std::string)的内部结构

字符串由指向其第一个字符的指针引用。下面是显示以下内容的代码:

char *ptr;

ptr = "hello\n";

printf("%s\n", ptr);
ptr++;
printf("%s\n", ptr);

您正在了解C(和C++)如何处理字符串(而不是C++的std::string)的内部结构

字符串由指向其第一个字符的指针引用。下面是显示以下内容的代码:

char *ptr;

ptr = "hello\n";

printf("%s\n", ptr);
ptr++;
printf("%s\n", ptr);

a) 不要使用数组(首选std::vector/std::array)b)这是按预期工作的,第二个调用运算符
char*
重载。您是否正在寻找第二个来打印内存地址、一个字符或其他内容?a)不要使用数组(首选std::vector/std::array)b)这是按预期工作的,第二个函数调用运算符的
char*
重载
您是在寻找第二个函数来打印内存地址、一个字符还是其他什么?实际上,更准确地说,C没有内置的字符串构造。这是标准C库的一个功能。Ash:这不是真的,字符串文字是一个内置结构,
argv
被定义为专门包含“字符串指针”,字符集的描述说空字符“用于终止字符串”等。主函数由“C”调用库中的启动代码甚至不值得响应。实际上,“C”语言的核心是相当简单的。没有输入也没有输出(打开/读取/写入是函数调用,而不是语言语句)。即使是主要功能也不是语言本身的一部分。它们可能是一些标准的一部分,现在有些人可能会把它们看成是“C语言”…实际上,更准确的是,C没有内置的字符串构造。这是标准C库的一个功能。Ash:这不是真的,字符串文字是一个内置结构,
argv
被定义为专门包含“字符串指针”,字符集的描述说空字符“用于终止字符串”等。主函数由“C”调用库中的启动代码甚至不值得响应。实际上,“C”语言的核心是相当简单的。没有输入也没有输出(打开/读取/写入是函数调用,而不是语言语句)。即使是主要功能也不是语言本身的一部分。它们可能是一些标准的一部分,现在有些人可能会把它们看成是“C语言”…
// std::hex is optional. It prints the address in hexadecimal format.  
cout<< std::hex << static_cast<void*>(&s[0]) << std::endl;
// prints the value of a pointer itself
ostream& operator<< (const void* val);
char *ptr;

ptr = "hello\n";

printf("%s\n", ptr);
ptr++;
printf("%s\n", ptr);