C++中cout将字符型指针当做字符串名处理???
我才入门C++。。书上有段程序:#include<iostream>usingnamespacestd;intmain(){char**p;char*name[]={"B...
我才入门C++。。书上有段程序:
#include <iostream>
using namespace std;
int main(){
char **p;
char *name[]={"BASIC","FORTRAN","C++"};
p=name+2;
cout<<*p;
cout<<**p;
return 0;
}
表示对cout的输出很不理解啊,*p这个应该是一个地址啊,就是name数组的第三个元素,但是为什么cout中没有输出地址,而是把它指向的字符串输出了?? 展开
#include <iostream>
using namespace std;
int main(){
char **p;
char *name[]={"BASIC","FORTRAN","C++"};
p=name+2;
cout<<*p;
cout<<**p;
return 0;
}
表示对cout的输出很不理解啊,*p这个应该是一个地址啊,就是name数组的第三个元素,但是为什么cout中没有输出地址,而是把它指向的字符串输出了?? 展开
2012-08-30
展开全部
cout为流对象,自动识别输出数据的类型,对于字符地址,即指针类型,就是输出其所在地址区间的所有字符,直到字符串结束符'\0'为止。
数组name的元素存放的是字符串的首地址,name[0]的值为"BASIC"的首地址,name[1]的值为"FORTRAN"的首地址,name[2]的值为"C++"的首地址。
因为数组nam是存放地址的数组,即指针数组,所以二级指针的性质与name相当了。
p=name+2; //使p指向name[2],*p就是name[2]的值,即"C++"的首地址,所以cout<<*p输出"C++"
cout<<**p; //*p是"C++"的首地址,**p就是元素'C'的值,所以cout<<**p输出的是C
数组name的元素存放的是字符串的首地址,name[0]的值为"BASIC"的首地址,name[1]的值为"FORTRAN"的首地址,name[2]的值为"C++"的首地址。
因为数组nam是存放地址的数组,即指针数组,所以二级指针的性质与name相当了。
p=name+2; //使p指向name[2],*p就是name[2]的值,即"C++"的首地址,所以cout<<*p输出"C++"
cout<<**p; //*p是"C++"的首地址,**p就是元素'C'的值,所以cout<<**p输出的是C
展开全部
对于char* 或者wchar_t* , 都是会输出字符串.
如果想输出地址的话要转换下.
cout << (void*)*p; 这样.
如果想输出地址的话要转换下.
cout << (void*)*p; 这样.
追问
不好意思,能再问一下吗,为什么这样的话会输出字符串呢?
追答
看你说才刚入门, 就能问这样的问题, 应该是有C或者其他编程经验吧.
C++的IO流是通过操作符"重载"来实现的, 其通过参数类型的匹配来完成输出格式的匹配.
也就是说cout实际上定义了很多个<<, 使用是通过参数类型来决定调用哪一个.
比如说
OS& operator <<(OS&, char*) // 输出字符串的函数.
OS& operator <<(OS&, void*) // 输出指针地址的函数.
当cout << p时; 如果p是个char*, 那么就会调用前一个函数, 用字符串方式输出.
如果p是其他的指针, 包括void*,int*等等; 都会匹配第二个函数, 用指针方式输出.
cout不光定义了所有内置类型的 << 输出操作. 还有一些库类型也被包含在里面.
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
**(p+1)//是打印是+号
*p是c++字符串的地址
**p是对c++这个字符串取第一个字符的意思
请问 你学过字符串吗?输出字符串不就是输出首地址之后申请的内存吗?
//char* p = "abc";
难道 你输出字符串abc 是cout<<*p<<endl;???不都是cout<<p<<endl;吗?
*p是c++字符串的地址
**p是对c++这个字符串取第一个字符的意思
请问 你学过字符串吗?输出字符串不就是输出首地址之后申请的内存吗?
//char* p = "abc";
难道 你输出字符串abc 是cout<<*p<<endl;???不都是cout<<p<<endl;吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
*p 就是字符串
p是地址
p是地址
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询