c++里指针的问题
小甲鱼老师有一段C++的视频,代码如下:#include <iostream>int main()
{
const unsigned short ITEMS = 5;
int intArray = {1, 2, 3, 4, 5};
char charArray = {'F', 'i', 's', 'h', 'C'};
int *intPtr = intArray;
char *charPtr = charArray;
std::cout << "整型数组输出: " << '\n';
for( int i=0; i < ITEMS; i++ )
{
std::cout << *intPtr << " at " << intPtr << '\n';
intPtr++;
}
std::cout << "字符型数组输出: " << '\n';
for( int i=0; i < ITEMS; i++ )
{
std::cout << *charPtr << " at " << charPtr << '\n';
charPtr++;
}
return 0;
}
这里我有些晕了。charptr是指向字符数组的指针啊?这个指针指向的是字符数组的首地址,即charArray的地址。那std::cout << *charPtr << " at " << charPtr << '\n';这个语句打出来的应该是charArray的地址啊?为什么打出来的是FishC,变成整个数组了呢?为什么上面整型数组打印的就不是整个数组12345,而是首地址呢?
因为字符串数组比较特殊,想想你要输出一个字符串,是不是可以直接这样
s = "good day"
cout<<s<<endl;
这里s其实也是字符串数组的地址,但是你用cout进行输出的时候,会自动输出里面的字符,直到遇到'\0'
这是因为cout比printf相对更智能~或者说这是一个重载的体现~他不会要求你怎么去格式化输出这个值,他可以自己去选择~
如果你要输出地址~那你大可以搞个强转~ 转成void指针~不就是地址了~
风过无痕丶 发表于 2018-2-28 13:27
这是因为cout比printf相对更智能~或者说这是一个重载的体现~他不会要求你怎么去格式化输出这个值,他可以 ...
非常感谢您的答复,我又复习了c的printf,您的答案让我更深入的了解了cout,怪不得小甲鱼用reinterpret_cast来强转。抱歉不能评两个最佳,您回复的也切中我不会的点,我给您评满分。{:5_91:}
页:
[1]