为什么字符串的行为不同?
Why do & behave differently for strings?
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char x[100]="hello";
int s=strlen(x);
cout<<&(x[0]);
}
如果我编译并运行它,
输出是你好
为什么输出不是字符"h"的地址?
因为operator <<
被重载了,const char*
打印const char*
指向的零端的C字符串。
指针
不保留信息,无论它们指向数组的单个对象还是第一个对象。还要考虑到表达式中的数组名称将转换为指向其第一个元素的指针。因此,例如,如果您有这样的 const char *
类型的指针
const char *p = "Hello";
那么自然会期待这种说法
std::cout << p << std::endl;
将输出字符串文字"Hello"。
如果要输出字符串文本的第一个元素的地址,则必须对类型为 void *
的指针使用另一个重载operator <<
std::cout << ( const void * )p << std::endl;
因此,如何处理 char *
类型的指针存在一个难题,因此解决了将此类指针视为指向字符串第一个元素的指针并因此输出整个字符串的问题。
相关文章:
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 为什么这个 c++ 代码打印出长度 5,当我打印出字符串时,程序会自动终止?
- C ++中的StringStream有助于使用向量从字符串中提取逗号分隔的整数,而不是空格分隔的整数,为什么?
- 为什么我不能将字符串::赋回字符串?
- 为什么字符串比较的 == 运算符相对于任一字符串长度线性时间(似乎)?
- 为什么字符串的 move() 会改变内存中底层数据的位置?
- 为什么我的字符串变量没有打印完整的字符串?
- 为什么我的子类不继承父类的字符串?
- C++字符串大小减去整数不是预期值,为什么?
- 为什么我的 cout 在输出中没有显示字符串?
- 为什么在为其分配编号后无法显示我的字符串值?
- 为什么没有访问所有字符串字符?
- 为什么可以将整数分配给字符串变量?
- C++子字符串为什么这样做
- 我的课堂上不能有字符串.为什么
- C++字符串为什么不能用作字符数组
- C++字符串流:接受字符串,但不接受存储在变量中的字符串.为什么?
- 反向字符串:为什么会崩溃
- 溢出字符数组每次都覆盖完全相同的字符串-为什么?