C++ char pointer

C++ char pointer

本文关键字:pointer char C++      更新时间:2023-10-16

为什么会发生以下情况?

char str[10]="Pointers";
char *ptr=str;  
cout << str << "n"; // Output : Pointers
int abc[2] = {0,1 };
int *ptr1 = abc;
cout <<ptr1 << "n"; // But here the output is an address.
                     // Why are the two outputs different?

正如其他人所说,空白的原因是因为您要求它打印包含空格字符的str[3]

你的第二个问题似乎是问为什么在打印char*(它打印字符串)和int*(它只是打印地址)之间有区别。char*被视为一个特例,它被认为代表一个c风格的字符串;它打印从该地址开始的所有字符,直到最后一个空字节。

其他类型的指针可能不是数组的一部分,即使它们是,也没有办法知道数组的长度,因为没有标准的结束符。因为没有更好的方法来处理它们,所以打印它们只是打印地址值。

1)因为str[3]是一个空格,所以char * ptr = str+3指向一个空格字符

2) <操作符重载,则根据参数类型调用实现:>

  • 指向int (int*)的指针使用默认指针实现并输出格式化的地址
  • 指向char (char*)的指针是特化的,输出格式为从它指向的值开始的空终止字符串。如果要输出地址,必须将其强制转换为void*

空格实际上是"LAB"后面的空格字符。打印"LAB"answers"No 5"之间的空格。

第二个问题:你看到的是地址,因为ptr1实际上是地址(指针):

int *ptr1;

如果你想看到它的第一个成员(0),你应该打印*ptr1