分享

输出字符数组名与整形数组名的区别

 susongdada 2013-07-08
    
        先来看两个例子,① int  a[3]={1,2,3};
                                      cout<<a<<endl;
                                        ② char  b[3]={“ab”};
                                      cout<<b<<endl;
        ①的输出是0012FF00,是一个地址,而②的输出是ab,是数组b里的内容,不是数组名都可以理解为指向数组首元素的指针吗,那为什么②中输出的不是地址呢?
        其实这里牵涉到的知识是C++的重载机制,对于一维字符数组名的输出,编译器会默认你想输出的是数组里的内容,而对于其他类型数组名的输出,如整形数组,编译器默认的输出是数组首元素的地址,当然你要是想让"<<"运算符对字符数组名输出地址,你可以考虑在库里面将“<<”进行重载一次。注意,对于二维数组又有所不同,如果定义的是二维数组,不管是不是字符数组,输出数组名得到的都是地址。另外,不管字符数组还是别的类型数组,不管是一维还是二维,在C++中都不会进行数组越界检查,所以越界访问数组时编译器不会报错。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多