永发信息网

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

答案:5  悬赏:0  手机版
解决时间 2021-12-18 22:52
  • 提问者网友:太高姿态
  • 2021-12-18 08:59
#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不应该是地址吗?
最佳答案
  • 五星知识达人网友:从此江山别
  • 2021-12-18 10:22
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存储的地址,这可能是流操作本身的机制造成的
字符串存储在文字常量区,它的地址是不变的且程序运行期间一直存在
而局部变量存储在栈区,每次调用函数都会在栈区为它分配一个存储空间,所以它的地址并不是固定的
也许这就是为什么流操作符输出一个指向字符串的指针和输出变量的指针一个是值一个是地址的原因吧
全部回答
  • 1楼网友:上分大魔王
  • 2021-12-18 14:53
q3: -&gt; 是指针访问成员用的符号,是约定的,就像非指针访问用 . q2: new是c++的操作符,用来动态分配内存,返回内存地址。这里表示新建一个cat对象,并返回了这个对象的地址(给指针pcat) q1: 第17行你的理解没错,指针的值是地址,指向cat对象是说指针的值为某cat对象的内存地址,用*p就能访问到这个对象。
  • 2楼网友:低血压的长颈鹿
  • 2021-12-18 13:40
*b代表是输出第一个字符,类似于a[0]; 你也可以输出*(b+1)刚输出e 变量b是地址,但*b就代表一个值了
  • 3楼网友:迷人又混蛋
  • 2021-12-18 12:19
b就是地址,是这个字符数组的首地址;当我们(定义一个指针变量时比如此例的b,在变量前面加一个“*”号,说明这是一个指针变量),* b就是指针变量,但在代码中b才是地址,* b是该地址指向的数据,在定义中的* b和代码中的* b意义是不一样的。
  • 4楼网友:低音帝王
  • 2021-12-18 11:13
字符串名实际上就是个指针。 a指向第一个元素h。 把a的内容赋给b后,指针b也指向h。 输出*b就是输出b当前指向的内容。 输出b相当于把它当成了串。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯