注册 登录
编程论坛 C++教室

字符串变量首地址问题

慢慢行走 发布于 2015-06-29 15:57, 601 次点击
程序代码:
#include<iostream>
#include<string>
#include<cstdlib>

using namespace std;
int main()
{
    string a = "long";
    cout << &a << endl;
    cout << (void*)&a[0];

    system("pause");
    return 0;
}

输出结果:
只有本站会员才能查看附件,请 登录

         
问题:1.a与a[0]的地址不是应该是一样的么,为啥输出的结果不一样?(难道我输出&a,是指地址的地址么)
      2.为什么&a与&a[0]的地址总是相差4?(运行很多遍都是相差4)
6 回复
#2
wp2319572015-06-29 15:58
不是问过一遍了吗  怎么还问呢
#3
慢慢行走2015-06-29 16:13
回复 2楼 wp231957
之前发错版块了
#4
wp2319572015-06-29 16:14
管他发哪个版块了  会了就行了
#5
TonyDeng2015-06-29 19:19
会了?是那样的么?
#6
TonyDeng2015-07-02 12:20
std::string是一个容器对象,不是什么C數組。谁告诉你这个对象的地址等于内里某个字段的入口地址的?地址不同才正常,相同了那才怪。不要学了C就想当然套到C++上面去,认认真真看C++的书,看清楚概念和原理,当什么也不知道地重新学才是明智的,想当然只会是魔障。

[ 本帖最后由 TonyDeng 于 2015-7-2 12:23 编辑 ]
#7
夏如风2015-07-04 17:43
1.虽然字符串很像数组,但字符串中的某个字符的地址是表示不出来的,它是一体的,而数组中的每个数的地址能详细的表现出来,所以a与a[0]是不同类型的数,编译器就会给它们分配不同的空间,所以输出的地址也就不一样。
2.long含四个字符,每个字符占一个字节。
1