+ -
当前位置:首页 → 问答吧 → 一个很基础关于指针的问题

一个很基础关于指针的问题

时间:2011-11-26

来源:互联网

被同学问到这个问题,不知道怎么回答
C/C++ code

  char *s="abcd";
  cout<<s<<\n;
  cout<<*s<<\n;
  cout<<++s<<\n;
  cout<<*(++s)<<\n;

  int i,*p;
  i=1;
  p=&i;
  cout<<*p<<\n;
  cout<<p;
/*输出结果为:abcd
              a
              bcd
              b
              1
              ox....(一个地址,具体忘了)
*/ 


为什么s输出的不是这个字符串的首地址,就像p输出为i的地址?

作者: Liekkas   发布时间: 2011-11-26

编译器做的。

作者: jennyvenus   发布时间: 2011-11-26

p里的值就是i的地址

作者: double__double   发布时间: 2011-11-26

>>为什么s输出的不是这个字符串的首地址,就像p输出为i的地址?
与cout重载<<符号有关,因为是s是char 指针的缘故
所以对应的<<重载函数是:
ostream& operator<<(const char *);相匹配
所以输出的是s对应的字符串,如果想和p输出的一样
稍微改动下即可
cout<<(void *)s<<'\n';



作者: gameslq   发布时间: 2011-11-26



++

遇到字符串想输出其地址,可以转换为void*

比如:复杂的写法

char *s="abcd";
  std::cout<< (void*)(&(*s))<<std::endl;
  





引用 3 楼 gameslq 的回复:
>>为什么s输出的不是这个字符串的首地址,就像p输出为i的地址?
与cout重载<<符号有关,因为是s是char 指针的缘故
所以对应的<<重载函数是:
ostream&amp; operator<<(const char *);相匹配
所以输出的是s对应的字符串,如果想和p输出的一样
稍微改动下即可
cout<<(void *)s<<'\n';

作者: caddor2011   发布时间: 2011-11-26

顶楼上的

作者: xihu1364   发布时间: 2011-11-26