新手请教为什么&*names[1] 取出来的不是个地址?

wfsswfss 2017-09-12 01:38:48
#include <iostream>
using namespace std;

const int MAX = 4;

int main(int argc, const char * argv[]) {

const char *names[MAX] = {
"ZaraAlqqqqqqq",
"Hina Ali",
"Nuha Ali",
"Sara Ali",
};

cout << names[1] << endl;
cout << *names[1] << endl;

cout<<&names[1]<<endl;
cout<<&*names[1]<<endl;

}
为啥结果是这样嘚?请老师解惑。

...全文
218 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-09-12
  • 打赏
  • 举报
回复
乍看起来c++的cin、cout、ifstream、ofstream、istringstream、ostringstream在输入、输出上比c的scanf、printf、fscanf、fprintf、fread、fwrite、sscanf、sprintf简单,不用格式控制符! 但是不用格式控制符,输入输出恰好是你期望的格式的时候好说;等到输入输出不是你期望的格式的时候,你就会觉得还是用格式控制符更方便、更靠谱。 摒弃cin、cout、ifstream、ofstream、istringstream、ostringstream! 使用scanf、printf、fscanf、fprintf、fread、fwrite、sscanf、sprintf。
wfsswfss 2017-09-12
  • 打赏
  • 举报
回复
引用 4 楼 wanggui2015 的回复:
C++里用cout输出字符型指针的地址,要用void*

	cout << (void*)&(*names[1]) << endl;
	cout << (void*)names[1] << endl;
http://blog.csdn.net/u012948302/article/details/54910645
非常感谢。
「已注销」 2017-09-12
  • 打赏
  • 举报
回复

cout << names[1] << endl;
cout << (void *)names[1] << endl;
srhouyu 2017-09-12
  • 打赏
  • 举报
回复
引用 2 楼 wfsswfss 的回复:
[quote=引用 1 楼 SXJIAKE 的回复:] &*names[1] 和 names[1] 不就一样吗?
蛤?没明白。 names[1] 、*names[1]、&names[1]、&*names[1] 分别代表了什么意义,麻烦解释下。 我以为 *names[1] 既然指的是 “H”,&*names[1]会取到“H”的地址。[/quote] cout见到一个指针时,不一定就会打印出地址。它遇到char*时会认为这是字符串,遇到其他指针类型时才会认为这是个地址。 你的四行,类型分别是char*,char,char**,char* 所以结果如你所见。
「已注销」 2017-09-12
  • 打赏
  • 举报
回复
字符 H 的地址,和字符串 "Hina Ali" 的首地址,不一样?
wallesyoyo 2017-09-12
  • 打赏
  • 举报
回复
引用 2 楼 wfsswfss 的回复:
[quote=引用 1 楼 SXJIAKE 的回复:] &*names[1] 和 names[1] 不就一样吗?
蛤?没明白。 names[1] 、*names[1]、&names[1]、&*names[1] 分别代表了什么意义,麻烦解释下。 我以为 *names[1] 既然指的是 “H”,&*names[1]会取到“H”的地址。[/quote] &*names[1]是“H”的地址没错,names[1]这个也是“H”的地址啊,所以一样没毛病呀。
wallesyoyo 2017-09-12
  • 打赏
  • 举报
回复
C++里用cout输出字符型指针的地址,要用void*

	cout << (void*)&(*names[1]) << endl;
	cout << (void*)names[1] << endl;
http://blog.csdn.net/u012948302/article/details/54910645
www_adintr_com 2017-09-12
  • 打赏
  • 举报
回复
是一个 char* 的地址, cout 对 char* 有重载, 不输出地址内容, 而是输出指向的字符串内容
wfsswfss 2017-09-12
  • 打赏
  • 举报
回复
引用 1 楼 SXJIAKE 的回复:
&*names[1] 和 names[1] 不就一样吗?
蛤?没明白。 names[1] 、*names[1]、&names[1]、&*names[1] 分别代表了什么意义,麻烦解释下。 我以为 *names[1] 既然指的是 “H”,&*names[1]会取到“H”的地址。
「已注销」 2017-09-12
  • 打赏
  • 举报
回复
&*names[1] 和 names[1] 不就一样吗?

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧