标题:求助指针与字符串的问题
只看楼主
夜猫man
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-3-16
结帖率:50%
已结贴  问题点数:20 回复次数:3 
求助指针与字符串的问题
这是我测试随便写的:
#include <iostream>
using namespace std;
 int fac(char*string){
     char*abc;
     cout<<*string<<endl;
     cout<<string<<endl;
     char*ptr=string;
     cout<<ptr<<endl;
     cout<<*ptr<<endl;
     cout<<*abc<<endl;
     return 0;
 }
int main(){
    char str[]="hello";
    fac(str);
    int aaa=2;
    int*p;
    p=&aaa;
    cout<<p<<endl;
}
结果是:
h
hello
hello
h
U
0x22ff5c
我想问的是 :
1.为什么cout<<*string<<endl;的结果是h;这不是应该是输出 hello吗?
2. cout<<string<<endl;的结果是 hello呢  这不是应该输出改字符串的内存地址吗?
请各位指教一下..
搜索更多相关主题的帖子: return 字符串 hello 
2011-04-16 21:02
a417988290
Rank: 2
等 级:论坛游民
帖 子:1
专家分:20
注 册:2011-4-17
得分:20 
string指向的是str的数组的首地址 也就是str[0] 所以就输出了h 如果想输出hello的话 把*string换成string[6]
2011-04-17 10:03
Pirelo
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:118
专家分:550
注 册:2011-1-28
得分:0 
在VC里面,这个和std::cout输出符有关,
如果cout<<*string;表示输出指针string所指向存储区的内容,如楼上所说,*string=‘h’,
如果cout<<string,且string指向一片连续的存储区域,则会输出string所指向的连续存储区域的所有内容,楼主的例子中,指针string所指向的区域正是存储数组str[]="hello"的连续区域,因此这时候输出hello,
同样cout<<ptr;与cout<<*ptr也是如此
而楼主用cout<<*abc<<endl;指针并未被初始化而使用,所以能输出它的地址,但这种做法是相当危险的!!!



[ 本帖最后由 Pirelo 于 2011-4-18 16:23 编辑 ]
2011-04-18 16:22
棉雨
Rank: 5Rank: 5
等 级:职业侠客
帖 子:174
专家分:368
注 册:2011-4-22
得分:0 
3楼说的详细。
2011-04-23 17:05



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




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

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