| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 997 人关注过本帖
标题:关于字符数组名的问题
只看楼主 加入收藏
ly861014
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:66
专家分:177
注 册:2008-10-28
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
关于字符数组名的问题
最近又想到了这个问题,这是个老问题了,可不见得每个人都会,我就很疑惑。
int ia[3] = {1, 2, 3};
char ca[3] = {'a', 'b', '\0'};
cout << ia << endl;  //输出的是ia首元素地址
cout << ca << endl;  //输出结果却为"ab"


对第二个输出语句为什么输出的不是ca的首元素地址呢?
搜索更多相关主题的帖子: 数组名分别代表什么 
2009-08-15 01:05
xufen340
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:166
专家分:1351
注 册:2009-8-7
收藏
得分:20 
我和你一样不会,但是我首先想到可能跟操作符重载有关.
cout << ia
调用ostream& ostream::operator<<(const void * ptr)这个;
cout << ca
调用ostream& ostream::operator<<(const char * s)这个;
其实在这里ia,ca肯定是首地址,但是cout<<调用操作符重载后可以不同的输出。我这里有个例子可以证明:
#include<iostream.h>
int main(){
 
    int ia[3] = {1, 2, 3};
    char ca[3] = {'a', 'b', '\0'};
    void * p;
 
    p=ia;
    cout << p << endl;//调用ostream& ostream::operator<<(const void * ptr)
    cout<<ia<< endl;//调用ostream& ostream::operator<<(const void * ptr)
    p=ca;
    cout <<p << endl;  //输出的是ca首元素地址,调用ostream& ostream::operator<<(const void * ptr)
    cout <<ca ;///输出的是ab,调用ostream& ostream::operator<<(const char * s)
int u;
cin>>u;
}
收到的鲜花
  • black4232009-08-15 15:03 送鲜花  1朵   附言:我很赞同
2009-08-15 08:46
ly861014
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:66
专家分:177
注 册:2008-10-28
收藏
得分:0 
回复 2楼 xufen340

    有道理,之前我想到是不是和字符数组在内存中的存储形式有关,但那又讲不通,因为如果和存储形式有关的话,那用一个void*指针再去指向它,输出结果不应该发生变化,但事实上发生了变化。
    如果用重载来解释的话有道理,它好像是把char*单独进行重载,其余的都用void*形式,但是话说回来,它为什么要把char*区分出来呢?是不是因为字符,C风格字符串在我们平时使用的时候就和int, float, double这些不一样呢?比如,文件名都是C风格字符串形式。
   
2009-08-15 11:03
无语随风
Rank: 1
等 级:新手上路
帖 子:22
专家分:7
注 册:2009-7-13
收藏
得分:0 
哈哈,我来说说我的理解,int ia[3] = {1, 2, 3}; ia是数组的数组名,其实它的本质是一个常量,它代表数组首元素的地址,可以转换为指针使用,但数组名并不等同于指针,数组名和枚举常量类似,

char ca[3] = {'a', 'b', '\0'};中数组名ca也是代表数组首元素的地址,是一个常量,如果你count << *ca那么你就会输出‘a'而不是"ab"但是你count << ca时数组名转换为指向数组首元素的地址,cout <<遇到字符地址就会从其地址开始输出地址中的内容直到遇到空字符为止,也就是\0了,如果没有\0就会一直输出地址中的内容,直到恰好遇到内存某处的\0.当然这是因为运算符重载的原因,不知道你明白了没有。
2009-08-15 20:26
Lambert008
Rank: 2
来 自:anhui
等 级:论坛游民
帖 子:24
专家分:65
注 册:2009-7-1
收藏
得分:0 
支持2楼的说法,很有道理。。。

梦永不会灭。。。
2009-08-15 20:32
ly861014
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:66
专家分:177
注 册:2008-10-28
收藏
得分:0 
回复 4楼 无语随风

谢谢,最后一句之前那些话我也知道,但不是我的问题的答案,只有最后一句才是答案,但也只是2楼的总结语。
2009-08-16 14:58
快速回复:关于字符数组名的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014978 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved