如何获取char* 指针的地址

Graveworm 2009-06-02 03:04:06
输出char*指针得到的只是它指向的内容
void getAddr()
{
char a[8] = {'1','2','3','4','5','6','7','8'};
char *cp = a;
cout<<a<<endl;
cout<<&a[0]<<endl;
cout<<&(*cp)<<endl;

//下面两句输出的应该不是a和cp的地址吧?
cout<<&cp<<endl;
cout<<&a<<endl;

}
compiler: C++
result:

12345678x "
12345678x "
12345678x "
0x22ff4c
0x22ff50
...全文
1751 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
cl__2009 2010-03-25
  • 打赏
  • 举报
回复
不知道楼主是否清楚了,cout<<&a就是输出数组a的首地址,它不需要像指针一样另外开辟一个四字节的内存单元来存放该指针,而对于字符指针cout<<cp输出的是字符串,cout<<&cp输出的是字符指针cp所在的内存单元,如果要想输出cp的值,也就是数组a的首地址,则只能cout<<(int)cp了,输出的是该地址的十进制表示,这个有点不完美,不像cout<<&cp一样直接输出地址的十六进制表示,不过也没办了了。
Eleven 2009-06-02
  • 打赏
  • 举报
回复
up
papaofdoudou 2009-06-02
  • 打赏
  • 举报
回复
强烈支持12L
飞天御剑流 2009-06-02
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 Graveworm 的回复:]
引用 8 楼 lianshaohua 的回复:
引用 2 楼 Graveworm 的回复:
引用 1 楼 lianshaohua 的回复:
cp里面存的就是a[8]的地址,
a也是a[8]的地址,
你用:&a[0]也没有错;

而cp本来就是一个指针,它指向一个变量的地址,&cp就是取的cp这个指针变量的地址了;
a就是字符数组的地址,&a就是字符数组地址的地址;

那怎么得到a的地址啊,cout < <a只能输出其内容,而&a又是地址的地址


cout < <&a[0] < <endl;输…
[/Quote]


原来楼主想打印cp的值啊,只要在打印的时候把cp的类型强制转换为非char*类型就行了,并不是一定要void*的,例如:

cout < <(int*)cp < <endl; 或cout < <(float*)cp < <endl; 都可以。只有在char*类型下才会打印cp指向的字符串内容。

&a不是字符数组地址的地址,&a的意义是对数组a这个对象取地址,类型是int(*)[8],a这个标识符本身不是个变量,更不是对象,是没有地址的。
ztenv 版主 2009-06-02
  • 打赏
  • 举报
回复
char ab[10];
for(int i=0;i<10;i++)
ab[i]='c';
char * pa=ab;
printf("%x\n",ab);
printf("%x\n",&ab[0]);
printf("%x\n",pa);
printf("%x\n",&pa);

cout和printf()有点不太一样
汗,学习了!
Graveworm 2009-06-02
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lianshaohua 的回复:]
引用 2 楼 Graveworm 的回复:
引用 1 楼 lianshaohua 的回复:
cp里面存的就是a[8]的地址,
a也是a[8]的地址,
你用:&a[0]也没有错;

而cp本来就是一个指针,它指向一个变量的地址,&cp就是取的cp这个指针变量的地址了;
a就是字符数组的地址,&a就是字符数组地址的地址;

那怎么得到a的地址啊,cout < <a只能输出其内容,而&a又是地址的地址


cout < <&a[0] < <endl;输出字符数组的地址;
[/Quote]
这句话输出的只是第一个字符,而不是地址
似乎需要采用3楼的方法cout<<(void*)cp<<才能得到cp的地址
char a[8] = "Hello";
char *cp = a;

cout<<a<<endl;
cout<<&a[0]<<endl; //和上句一样
cout<<(void*)cp<<endl; //char*比较特殊,需要这样才能输出
cout<<*cp<<endl;
cout<<&a<<endl; //这个就是数组a的实际地址了 = (void*)cp同
cout<<&cp<<endl; //这个应该是地址的地址,因为cp本身已经是一个指针

result:
Hello
Hello
0x22ff50
H
0x22ff50
0x22ff4c



papaofdoudou 2009-06-02
  • 打赏
  • 举报
回复
老兄啊,取一个数组名的地址和取一个指针的地址是不一样的啊;
char a[10]
&a的类型是一个指向数组的指针。是char(*)[10]类型的,a不是一个变量,你无法得到a本身的地址 &a的值和&a[0]是一样的。但是意义差别就远了
ztenv 版主 2009-06-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 Graveworm 的回复:]
引用 1 楼 lianshaohua 的回复:
cp里面存的就是a[8]的地址,
a也是a[8]的地址,
你用:&a[0]也没有错;

而cp本来就是一个指针,它指向一个变量的地址,&cp就是取的cp这个指针变量的地址了;
a就是字符数组的地址,&a就是字符数组地址的地址;

那怎么得到a的地址啊,cout < <a只能输出其内容,而&a又是地址的地址
[/Quote]

cout<<&a[0]<<endl;输出字符数组的地址;
ztenv 版主 2009-06-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 w0911h 的回复:]
引用 1 楼 lianshaohua 的回复:
cp里面存的就是a[8]的地址,
a也是a[8]的地址,
你用:&a[0]也没有错;

而cp本来就是一个指针,它指向一个变量的地址,&cp就是取的cp这个指针变量的地址了;
a就是字符数组的地址,&a就是字符数组地址的地址;

&a应该就是字符数组的地址吧,它应该和cp是同一个值
[/Quote]

&a[0]才是字符数组的地址,
和cp是同一个值;
飞天御剑流 2009-06-02
  • 打赏
  • 举报
回复
cout < <&cp < <endl; cp这个变量的地址

cout < <&a < <endl; a数组这个对象的地址
w0911h 2009-06-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lianshaohua 的回复:]
cp里面存的就是a[8]的地址,
a也是a[8]的地址,
你用:&a[0]也没有错;

而cp本来就是一个指针,它指向一个变量的地址,&cp就是取的cp这个指针变量的地址了;
a就是字符数组的地址,&a就是字符数组地址的地址;
[/Quote]
&a应该就是字符数组的地址吧,它应该和cp是同一个值
adventurelw 2009-06-02
  • 打赏
  • 举报
回复
cout << &a[0];也是对的。
adventurelw 2009-06-02
  • 打赏
  • 举报
回复
cout << (void *)cp;
Graveworm 2009-06-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lianshaohua 的回复:]
cp里面存的就是a[8]的地址,
a也是a[8]的地址,
你用:&a[0]也没有错;

而cp本来就是一个指针,它指向一个变量的地址,&cp就是取的cp这个指针变量的地址了;
a就是字符数组的地址,&a就是字符数组地址的地址
[/Quote]
那怎么得到a的地址啊,cout<<a只能输出其内容,而&a又是地址的地址
ztenv 版主 2009-06-02
  • 打赏
  • 举报
回复
cp里面存的就是a[8]的地址,
a也是a[8]的地址,
你用:&a[0]也没有错;

而cp本来就是一个指针,它指向一个变量的地址,&cp就是取的cp这个指针变量的地址了;
a就是字符数组的地址,&a就是字符数组地址的地址;

65,210

社区成员

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

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