fairylee83 发表于 2018-2-28 10:54:15

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,而是首地址呢?

BngThea 发表于 2018-2-28 10:54:16

因为字符串数组比较特殊,想想你要输出一个字符串,是不是可以直接这样
s = "good day"
cout<<s<<endl;

这里s其实也是字符串数组的地址,但是你用cout进行输出的时候,会自动输出里面的字符,直到遇到'\0'

风过无痕丶 发表于 2018-2-28 13:27:24

这是因为cout比printf相对更智能~或者说这是一个重载的体现~他不会要求你怎么去格式化输出这个值,他可以自己去选择~
如果你要输出地址~那你大可以搞个强转~ 转成void指针~不就是地址了~

fairylee83 发表于 2018-2-28 14:07:23

风过无痕丶 发表于 2018-2-28 13:27
这是因为cout比printf相对更智能~或者说这是一个重载的体现~他不会要求你怎么去格式化输出这个值,他可以 ...

非常感谢您的答复,我又复习了c的printf,您的答案让我更深入的了解了cout,怪不得小甲鱼用reinterpret_cast来强转。抱歉不能评两个最佳,您回复的也切中我不会的点,我给您评满分。{:5_91:}
页: [1]
查看完整版本: c++里指针的问题