标题:cout输出问题! 紧急
只看楼主
shaoyuan
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2008-9-7
结帖率:100%
 问题点数:0 回复次数:12 
cout输出问题! 紧急
#include<iostream.h>
#include<string.h>
void main()
{
  char a[20],*str1="hello",*str2="wang";
  cout<<str2;
}
为什么cout输出的不是str2所指向的字符串的地址?
搜索更多相关主题的帖子: 紧急 
2008-11-08 20:21
newyj
Rank: 2
等 级:新手上路
威 望:3
帖 子:542
专家分:0
注 册:2008-1-4
得分:0 
程序代码:
#include<iostream.h>
void main()
{
  char a[20],*str1="hello",*str2="wang";
  cout<<(int*)str2;
}
2008-11-08 20:45
安徽U阿朱
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2008-4-10
得分:0 
std::cout<<&str2;
2008-11-08 21:34
shediao
Rank: 1
来 自:山东
等 级:新手上路
威 望:1
帖 子:52
专家分:0
注 册:2008-9-23
得分:0 
老兄能否听我一言:
#include <iostream.h>
#include <string.h>
int main(int argc, char* argv[])
{
    char *str1="shediao";
    char *str2=str1;
    cout<<(unsigned *)str1<<endl;
    cout<<&str1<<endl;
    cout<<(unsigned *)str2<<endl;
    cout<<&str2<<endl;
    return 0;
}

结果:
0x00429108
0x0012FF7C
0x00429108
0x0012FF78
所以输出字符串的地址应该为cout<<(unsigned*)str1;
而 cout<<&str1;是指输出了指针变量的地址
2008-11-08 21:49
shaoyuan
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2008-9-7
得分:0 
printf("%p\n",str2);
 如果(unsigned*)str2是输出字符串的地址,那么如果加上上面的语句为什么输出的字符串的地址为什么和用(unsigned*)str2输出的不一样啊?
2008-11-08 22:21
pascale
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2008-9-9
得分:0 
[bo][un]shediao[/un] 在 2008-11-8 21:49 的发言:[/bo]

老兄能否听我一言:
#include
#include
int main(int argc, char* argv[])
{
    char *str1="shediao";
    char *str2=str1;
    cout

奇怪,开始赋值不是把字符串首地址赋给str2了么?对于指针有些我还是不很懂。。能否解释下?我怎么觉得是一样的。。
2008-11-09 00:44
shediao
Rank: 1
来 自:山东
等 级:新手上路
威 望:1
帖 子:52
专家分:0
注 册:2008-9-23
得分:0 
回复 5# 的帖子
是一样的  老兄 你可以仔细看看,
2008-11-09 00:55
shediao
Rank: 1
来 自:山东
等 级:新手上路
威 望:1
帖 子:52
专家分:0
注 册:2008-9-23
得分:0 
回复 6# 的帖子
兄弟,你说的是对的 char *str="shediao"就是把字符串的首地址付给了str 但是你要输出这个字符串的首地址是要进行 类型转换,不然就会输出字符窜了,

所以 输出字符串的地址就是 cout<<(unsigned *)str;  //把str转化为无符合整形就是地址

而 cout<<&str是输出了 变量str的地址,

具体情况可以参考一下我在4楼写的代码
2008-11-09 01:01
pascale
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2008-9-9
得分:0 
额。。ms有些明白了。。
str2是指针变量仅仅存放字符串首地址
字符串是存放在以那个首地址为开头的连续内存里
2008-11-09 01:02
pascale
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2008-9-9
得分:0 
[bo][un]shediao[/un] 在 2008-11-9 01:01 的发言:[/bo]

兄弟,你说的是对的 char *str="shediao"就是把字符串的首地址付给了str 但是你要输出这个字符串的首地址是要进行 类型转换,不然就会输出字符窜了,

所以 输出字符串的地址就是 cout

类型转换?这个不太明白。。
2008-11-09 01:03



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-243118-1-1.html




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

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