请神牛帮忙啊 看下面的C++代码 急!!!

ud_willsmith 2010-05-23 01:56:23
#include<iostream>
using namespace std;
int main()
{
char arr1[5]={'s','g','g','h'};
int arr2[5]={2,2,2,2,2};
cout<<arr1<<endl;
cout<<arr2<<endl;
return 0;
}
出现了两个不同的结果,第一个输出的是arr1的内容,第二个输出的是一个地址,这两个不是都相同么,为什么得到的结果会不同???
还有个问题:
#include<iostream>
using namespace std;
int main()
{
char *arr1="sfgdfs";
cout<<arr1<<" "<<&arr1<<endl;
return 0;
}
为什么第一个输出的是字符串的值(不应该是一个地址么),而只有&arr1输出的才是一个地址(这个不是指针的地址么)???
...全文
183 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
lnuyasha_hrb 2010-05-24
  • 打赏
  • 举报
回复
总结一下:
这其实主要是一个问题:
就是cin的工作机制问题,如果有时间的话,楼主可以多看看IO库,这样会对你有所帮助的
lnuyasha_hrb 2010-05-24
  • 打赏
  • 举报
回复
1.其实楼主定义的第一个数组是字符数组,在C标准中,字符数组理解为字符串,所以字符数组名也就是字符串名,也是字符数组的首地址
2.第一个数组不是标准意义上的字符串(标准的字符串是以'\n'结尾的),输出字符数组的内容是因为cin操作符的工作机制问题,当是字符串或字符数组的时候,输出其内容,直至遇到'\n'或者遇到字符数组的末端为止。

3.第二个数组是单纯意义上的int型数组,数组名就是数组的地址,cin操作符在输出标准数组时,并不把数组名作特别处理

希望我的解释能对你有所帮助,谢谢!!!
愤怒的熊猫007 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 ud_willsmith 的回复:]
#include<iostream>
using namespace std;
int main()
{
char arr1[5]={'s','g','g','h'};
int arr2[5]={2,2,2,2,2};
cout<<arr1<<endl;
cout<<arr2<<endl;
return 0;
}
出现了两个不同的结果,第一个输出的是arr1的内容,第二个输出的……
[/Quote]
第一个输出的是一个字符串,
第二个是一个int型的,因为没有 对'>>'重载输入int型数组的函数所以输出了他的地址!~
ud_willsmith 2010-05-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 movaxeffext 的回复:]
arr1 和arr2 都是指针(char * 和int *),但cout的“<<”运算符在处理他们是 有不同,对待不同的指针类型,处理结果就不同。
第二问,arr1 是一个指针,所以和第一问中的arr1 一样,cout 做同样的处理 ,输出字符窜,故它的引用操作,就是输出地址。
[/Quote]
还有一点不明白,在第二问中,它的应用输出的地址是哪个的地址啊???
ud_willsmith 2010-05-23
  • 打赏
  • 举报
回复
哦哦 学到了很多啊 谢谢!!!
Ricky-Lin 2010-05-23
  • 打赏
  • 举报
回复
学习了
a295748949 2010-05-23
  • 打赏
  • 举报
回复
数组和指针没搞懂!!
pengzhixi 2010-05-23
  • 打赏
  • 举报
回复
恩 你可以对比下char *p="bad";printf("%s",p);
stilling2006 2010-05-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lthyxy 的回复:]
1.具体的要看输入输出流式怎么处理这些东西的。如果是字符串的话确实是输出后面的字符。是整数数组的话不可以这样输出里面的数字的,要用循环。2个数组名确实是被隐士的转换成“地址了”。
2.与上面的一样。要想知道具体的实现就去研究输入输出流。。。的函数是怎么处理这些东西的。
[/Quote]
大家的答案都差不多啊~
永远的明日 2010-05-23
  • 打赏
  • 举报
回复
1、
cout后跟的是char *类型的话,输出字符串,其它类型(int* ,void *)的话输出地址

2、
同样,arr1是char *,所以输出字符串,而&arr1是char**,所以输出地址

这是cout对char*(字符串)的特殊处理
movaxeffext 2010-05-23
  • 打赏
  • 举报
回复
arr1 和arr2 都是指针(char * 和int *),但cout的“<<”运算符在处理他们是 有不同,对待不同的指针类型,处理结果就不同。
第二问,arr1 是一个指针,所以和第一问中的arr1 一样,cout 做同样的处理 ,输出字符窜,故它的引用操作,就是输出地址。
akonlbjrd 2010-05-23
  • 打赏
  • 举报
回复
[Quote=引用楼主 ud_willsmith 的回复:]
#include<iostream>
using namespace std;
int main()
{
char arr1[5]={'s','g','g','h'};
int arr2[5]={2,2,2,2,2};
cout<<arr1<<endl;
cout<<arr2<<endl;
return 0;
}
出现了两个不同的结果,第一个输出的是arr1的内容,第二个输出的……
[/Quote]
(1)char字符数组名代表的就是字符串本身,而int型数组名虽然也是指向这个数组的首地址但是不能这样的输出里面的值,要遍历。
(2)同上。。
liutengfeigo 2010-05-23
  • 打赏
  • 举报
回复
1.具体的要看输入输出流式怎么处理这些东西的。如果是字符串的话确实是输出后面的字符。是整数数组的话不可以这样输出里面的数字的,要用循环。2个数组名确实是被隐士的转换成“地址了”。
2.与上面的一样。要想知道具体的实现就去研究输入输出流。。。的函数是怎么处理这些东西的。

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧