您的位置:首页 > 编程语言 > C语言/C++

c++通过cout输出字符变量的地址

2017-07-22 17:01 190 查看
今天,我遇到了这样的一种情况,我想输出一个字符串的首地址。

那么该怎么输出呢?通常我们可能的想法是直接cout啊。

比如:

char ss[20]="hello";
cout<<ss<<endl;


运行结果:

hello

我们会发现,ss存储的值虽然是一个地址,但我们执行cout的时,实际上它会输出ss指向的字符串。

那该怎么办?我在输出的时候其实考虑到上面的情况了,然后我想了想,如果我这样输出是不是就可以了:

char ss[20]="hello";
cout<<&ss[0]<<endl;


但实际运行结果还是:

hello

通过上面的例子我们会发现,只要我们cout后面的输出对象是一个char*的类型时,它都会当作要输出这个地址指向的字符串来执行。它会从这个地址开始输出字符,直到遇到’\0’停止。那我们怎样才能让cout输出char*类型存值的地址呢?

c是靠%s,%x,%p来区分指针表达式&ss[0]的输出形式的;c++没有这个格式控制,只能按一种形式输出。

c++标准库中I/O类对输出操作符<<重载,在遇到字符型指针时会将其当做字符串名来处理,输出指针所指的字符串。

既然是这样,我们只需要将char*类型的指针进行强制转换成别的类型的指针,cout就会输出指针存储的地址。我们可以把它强转成void*类型。

char ss[20];
cout<<(void*)ss<<endl;


运行结果:

0x7fff695cf900
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: