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