永发信息网

一个关于c++指针与数组的问题

答案:5  悬赏:0  手机版
解决时间 2021-12-18 22:52
#include <iostream.h>

void main()
{

char a[10]="hello!";
char* b=a;
cout<<*b<<endl;
}

改程序输出的“h”;
但是如果改成
#include <iostream.h>

void main()
{

char a[10]="hello!";
char* b=a;
cout<<b<<endl;
}
这个就输出的是hello!,这是为什么?变量b不应该是地址吗?
最佳答案
a可以认为它等价于数组的首地址
char* b=a的意思是指针b存储的就是数组a的首地址
而cout<<流操作实际上从它后面的对象得到一个地址,再根据地址指向的存储区域得到数据并输出
所以cout<<b 输出的是指针b指向的"hello!"字符串
和cout<<a的输出结果是一样的
cout<<&a输出的就是"hello!"的第一个字符h的地址
cout<<&b输出指针b的地址,而不是b存储的地址
如果将b指向一个非字符串局部变量,比如整形变量,cout<<b将输出b存储的地址,这可能是流操作本身的机制造成的
字符串存储在文字常量区,它的地址是不变的且程序运行期间一直存在
而局部变量存储在栈区,每次调用函数都会在栈区为它分配一个存储空间,所以它的地址并不是固定的
也许这就是为什么流操作符输出一个指向字符串的指针和输出变量的指针一个是值一个是地址的原因吧
全部回答
q3: -&gt; 是指针访问成员用的符号,是约定的,就像非指针访问用 . q2: new是c++的操作符,用来动态分配内存,返回内存地址。这里表示新建一个cat对象,并返回了这个对象的地址(给指针pcat) q1: 第17行你的理解没错,指针的值是地址,指向cat对象是说指针的值为某cat对象的内存地址,用*p就能访问到这个对象。
*b代表是输出第一个字符,类似于a[0]; 你也可以输出*(b+1)刚输出e 变量b是地址,但*b就代表一个值了
b就是地址,是这个字符数组的首地址;当我们(定义一个指针变量时比如此例的b,在变量前面加一个“*”号,说明这是一个指针变量),* b就是指针变量,但在代码中b才是地址,* b是该地址指向的数据,在定义中的* b和代码中的* b意义是不一样的。
字符串名实际上就是个指针。 a指向第一个元素h。 把a的内容赋给b后,指针b也指向h。 输出*b就是输出b当前指向的内容。 输出b相当于把它当成了串。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
This maths problem isthat one.A. not so e
五边形的对角线共有
广东11选5返点怎么计算
在横线上填上“<”、“>”或“=”.0.1____
-What about apple juice?-Oh, yes, just A
郊区佳木斯市莲港运输有限责任公司这个地址怎
thriveon怎么说
江门哪个装修公司较好,江门哪个装修公司装修
单选题二战后城市化发展的特点有A.城市化速度
花生开花期能喷施高宝杀菌剂吗
真的有巨型乌贼袭击船只的事件吗?
地素女装北京哪个商场有卖?
艾尔之光韩服的大触有哪些??
Ballet is highly technical and itprofessio
什么是主动销售和被动销售,如何去主动销售
推荐资讯
我申请信用卡10天都过去了,怎么到现在还没有
雷诺发动机噪音时大时小是怎么回事
单选题下列各项有两个错别字的一项是A.黯然销
化合物AB,其中A离子和B离子的电子层结构相同
房山区良乡派出所在什么地方啊,我要处理点事
psalter的包包货号63191040这是什么牌子、什
单选题下列句中标点符号使用正确的一项是A.是
判断题竹节虫静止于树上时像一段树枝,这是竹
小米4手机壳可不可以用在红米上
余少群的详细资料
镁条在空气中燃烧产生大量的白烟,燃烧后称量
武江区国家税务局龙归税务局在什么地方啊,我
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?