码迷,mamicode.com
首页 > 编程语言 > 详细

c++输出char型变量与字符串的地址

时间:2015-05-05 10:40:27      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:面试题   c++   string   

在c里面如果指针是一个基本数值型
int ,foalt ,long等,如果输出里有
cout << ptr << endl;
其中ptr是指针的名,则输出的值是指针的地址,
如果是char * (char指针) 则输出的是char指针的值。

C++中,熟悉intchar型的变量是最基本不过的了,不过,我想,很多初学者会跟我一样,搞不懂如何输出一个char变量的地址?就举下面一个例子:

 

int i=97;

char c=‘a‘;

cout<<"line 1: i="<<i<<"\t\t"<<"c="<<c;

cout<<"\nline 2: &i="<<&i<<"\t"<<"&c="<<&c;

 

我想,对于line 1的输出结果是没有任何疑问的,而且,我想对于初学指针的朋友来说,你可能也会跟我一样,毫不犹豫的认为输出的会是两个地址,可是,你只答对了一半!

的确,line 2中的&i输出的是int变量i的地址,可是,当你看到运行结果的时候,你是不是应该会很惊讶:为什么&c输出的却是一个乱码?

首先,我想先介绍一下在C++中字符串的基础知识。

C++中,字符串是以空终止符(‘\0‘)结尾的字符数组,通过字符串中第一个字符的指针访问字符串。也就是说,字符串的值是字符串中第一个字符的(常量)地址。如下的面3种形式表示:

 

char *str="string";

char str2[]="string2";

char str3[]={‘s‘,‘t‘,‘r‘,‘i‘,‘n‘,‘g‘,‘3‘,‘\0‘};

cout<<"line 3: str="<<str<<endl;

cout<<"line 4: str2="<<str2<<endl;

cout<<"line 5: str3="<<str3<<endl;

 

运行可知,这3行的输出就是保存的字符串的值,而并非我们认为的地址。那么,我们可以联系到前面&c,其实这就是一个char *的变量,所以,输出的自然就应该是字符串的值。可是,&c保存的字符串是没有终止符的,因此输出的也就是乱码了。

最近,在读到《C++程序设计教程》(第4版)第12章的时候,我才解决了这个疑惑。实际上,任何程序员希望输出为地址的指针变量都要作一个转换,即强制char *转换成void *,那么,char型变量和字符串的地址就可以以十六机制的格式输出了,如下所示:

 

cout<<"line 6: static_cast<void *>(&c)="<<static_cast<void *>(&c)<<endl;

cout<<"line 7: static_cast<void *>(str)="<<static_cast<void *>(str)<<endl;

cout<< (int *)str<<endl;也可以

此时,可以看到输出的结果就是char类型变量和字符串变量的地址了。


c++输出char型变量与字符串的地址

标签:面试题   c++   string   

原文地址:http://blog.csdn.net/u014082714/article/details/45498527

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!