注册 登录
编程论坛 VC++/MFC

求助指针与字符串的问题

夜猫man 发布于 2011-04-16 21:02, 509 次点击
这是我测试随便写的:
#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呢  这不是应该输出改字符串的内存地址吗?
请各位指教一下..
3 回复
#2
a4179882902011-04-17 10:03
string指向的是str的数组的首地址 也就是str[0] 所以就输出了h 如果想输出hello的话 把*string换成string[6]
#3
Pirelo2011-04-18 16:22
在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 编辑 ]
#4
棉雨2011-04-23 17:05
3楼说的详细。
1