字符串指针和整形指针的区别

其实呀,对于  char *p="afjfkjkladfsjije";  这句话中的指针着实很奇怪。

      当你  cout<<*p<<endl;  的时候,它输出的是那个字符串的首个字符——'a'。

  当你  cout<<p<<endl;    的时候,它输出的是整个字符串的内容——""afjfkjkladfsjije""。

感觉到奇怪了吧,为什么这句话是输出整个字符串的内容,而不是地址呢。那么,我告诉你:没有为什么!

然而,经过高人指点了一下,发现是有原因的,什么原因呢?我也不太清楚,等明白了再告诉大家吧!下面补充上输出字符串指针地址的代码。

  下面我就给出一段代码来验证我的说法。

     #include "iostream"

  #include "cstdio"

  using namespace std;

  int main()

  {

  char *p = "abckdfej";

  for(int i=0; i<strlen(p); i++)

cout<<p[i]<<" ";  ///其实这种输出的方式不必大惊小怪的,也就是将指针转化成了数组嘛!

  cout<<endl;

  cout<<endl;

  while(*p)  ///这种遍历的方式倒值得注意一下。

  {

  cout<<*p<<"   ";

  cout<<p<<"   ";  ///看到没,这里输出的是字符串的内容,不过会逐个减少,因为p++的缘故

                     ///我将在下面一行补充上字符串指针的代码(只要将char* 转换成 void*就行了)

        void *pp = p;

        cout<<pp<<endl;  ///看到没,这里输出的就是字符指针的地址了。

  p++;

  }

  cout<<endl;

  cout<<endl;

  int a[10]={1,2,3,4,5,6,7,8,9,0};

  int *intp = a;  

  for(int j=0; j<10; j++)

  cout<<intp[j]<<" ";

  cout<<endl;

      while(*intp)

  {

  cout<<*intp<<"   ";

  cout<<intp<<endl;  ///看到没,这里输出的是地址。之所以来一个整形的数组,就是为了和字符串做一下对比。

  intp++;

  }

  cout<<endl;

  }

posted on 2011-08-18 12:15  飞-虎  阅读(2454)  评论(6编辑  收藏  举报

导航