C++ char pointer
C++ char pointer
为什么会发生以下情况?
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