假定有char * P="Hello";,要输出这个字符串的地址值的正确写法是
假定有char*P="Hello";,要输出这个字符串的地址值的正确写法是A.cout<<*PB.cout<<PC.cout<<&PD.cout<<(void*)P答案是...
假定有char * P="Hello";,要输出这个字符串的地址值的正确写法是
A.cout<< *P B.cout<<P
C.cout<<&P D.cout<<(void *)P
答案是哪个?为什么? 展开
A.cout<< *P B.cout<<P
C.cout<<&P D.cout<<(void *)P
答案是哪个?为什么? 展开
3个回答
展开全部
cout<<*P 结果是H;(结果经过C++代码执行) 原因:取指针P指向的地址里面的值,所以是字符串首地址的字符;
cout<<P 结果是Hello;(结果经过C++代码执行) 原因:不清楚:虽然P是指向字符串的地址,但是cout输出的结果却不是地址格式,而是整个字符串的内容。猜测:ostream.h中对cout的输出有变化;
cout<<&P 结果是个地址。但是经过跟printf ("%x,%x,%p,%p",&P,P,&P,P)的对比,cout<<&P的地址跟printf &P 一样 ,跟printf P不一样。说明该地址是指针P自己占用的内存地址,而非所指向的字符串地址。
cout<<(void *)P 结果是个地址。跟 printf P一样。说明该地址确实是Hello字符串的首地址。学而不精,只能靠猜:(void *)是把 P的地址硬转换成无返回值指针类型,要求cout不要对输出做处理,必须输出指针类型,所以结果才是字符串的地址。
贴出我的部分程序
#include <iostream>
#include <stdio.h>
using namespace std;
void main()
{
char a[10]="Hello";
char *p=a;
//输出hello(不懂为什么)
cout<<a<<"\t\tcout<<a"<<endl;
printf("%p\tprintf a输出字符串的地址\n",a);
cout<<p<<"\t\tcout<<p"<<endl;
printf("%p\tprintf p输出指针的地址值\n\n\n",p);
//输出p指针自己占用的地址
cout<<&p<<"\tcout<<&p"<<endl;
printf("%p\tprintf &p这个是p指针自己占用的地址 \n",&p);
cout<<&a<<"\tcout<<&a"<<endl;
printf("%p\tprintf &a这个是数组a的地址\n\n\n",&a);
cout<<(void *)a<<"\tcout<<(void *)a"<<endl;
printf("%p\tprintf &a[0]这是字符串首字符的地址\n",&a[0]);
cout<<(void *)p<<"\tcout(void *)p"<<endl;
printf("%p\tprintf &p[0]这个是指针指向第一个元素的地址值\n\n\n\n",&p[0]);
}
cout<<P 结果是Hello;(结果经过C++代码执行) 原因:不清楚:虽然P是指向字符串的地址,但是cout输出的结果却不是地址格式,而是整个字符串的内容。猜测:ostream.h中对cout的输出有变化;
cout<<&P 结果是个地址。但是经过跟printf ("%x,%x,%p,%p",&P,P,&P,P)的对比,cout<<&P的地址跟printf &P 一样 ,跟printf P不一样。说明该地址是指针P自己占用的内存地址,而非所指向的字符串地址。
cout<<(void *)P 结果是个地址。跟 printf P一样。说明该地址确实是Hello字符串的首地址。学而不精,只能靠猜:(void *)是把 P的地址硬转换成无返回值指针类型,要求cout不要对输出做处理,必须输出指针类型,所以结果才是字符串的地址。
贴出我的部分程序
#include <iostream>
#include <stdio.h>
using namespace std;
void main()
{
char a[10]="Hello";
char *p=a;
//输出hello(不懂为什么)
cout<<a<<"\t\tcout<<a"<<endl;
printf("%p\tprintf a输出字符串的地址\n",a);
cout<<p<<"\t\tcout<<p"<<endl;
printf("%p\tprintf p输出指针的地址值\n\n\n",p);
//输出p指针自己占用的地址
cout<<&p<<"\tcout<<&p"<<endl;
printf("%p\tprintf &p这个是p指针自己占用的地址 \n",&p);
cout<<&a<<"\tcout<<&a"<<endl;
printf("%p\tprintf &a这个是数组a的地址\n\n\n",&a);
cout<<(void *)a<<"\tcout<<(void *)a"<<endl;
printf("%p\tprintf &a[0]这是字符串首字符的地址\n",&a[0]);
cout<<(void *)p<<"\tcout(void *)p"<<endl;
printf("%p\tprintf &p[0]这个是指针指向第一个元素的地址值\n\n\n\n",&p[0]);
}
展开全部
你这个是C还是C++ C++的字符串输出使用string 并不是char啊 如果硬是要说 答案是B 因为p里面存的是字符串的地址 星号是作为引用符号 可以用p里面的存的地址找到里面的“hello”
追问
*_*我做的是c++的题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2015-09-25 · 知道合伙人软件行家
关注
展开全部
B cout<<P; //P就是字符串首地址
追问
谢谢。
如P是一指针类型表达式,则下列表达式中不是左值表达式的是
A.P B.*P
C.&P D.P+1
那这个选哪个?
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询