我最近刚学到指针,碰到几个问题,望各位大哥哥教教小弟~~~~谢~~~~~
1,
#include<iostream.h>
void main()
{
   int x[5]={2,4,6,8,10},*p,**pp;
   p=x;
   pp=&p;
   cout<<*(p++)<<endl;
   cout<<**pp<<endl;
}
上试中为何第一个输出是2 ?我老以为是4,不明白为何,p++不是等于p+1吗?
第二个就简直不明白。2,
#include<iostream.h>
void main()
{
char *pc;
char c[5];
cin>>c;
pc=c;
while(*pc!='\0')
{
cout<<*pc<<endl;
pc=pc+1;
}
cout<<pc<<endl;  //输出整个字符串
}
这样做如果输入:abc的话,显示结果是
a
b
c最后一行没东西啊(就是//输出整个字符串//的那行),为何呢?
但将cout<<pc<<endl;放到while前,就没事了,百思不得其解,为何如此?万望请教。

解决方案 »

  1.   

    我是这么分析的,你看看对不对:
    1.输出为2我也不懂,你改过++p试过吗?
    至于**pp。首先p是地址,pp是p的地址,也就是“地址的地址”,
    所以pp是二级指针,**pp的内容就是*p的内容。
    2。是不是因为while执行后*pc已经是\0,是无效字符,所以输出不了呢??
    你打算cout什么?一个字符串?还是单个字符?你的程序的功能我有点不解哦还有,偶不是大哥哥来的,呵呵~~
      

  2.   

    1.
    #include<iostream.h>
    void main()
    {
       int x[5]={2,4,6,8,10},*p,**pp;
       p=x;
       pp=&p;
       cout<<*(p++)<<endl;
       cout<<**pp<<endl;
    }
       cout<<*(p++)<<endl;可能是先打印*p的值,然后才p = p+1,因此为2。
       cout<<**pp<<endl;输出应该是4吧?int **pp表示pp是指向整形指针的指针。 pp = &p ->  *pp = p -> **pp = *p
      而p已经加过一了,所以 *p = 4,即**pp = 4.
    2.
    #include<iostream.h>
    void main()
    {
    char *pc;
    char c[5];
    cin>>c;
    pc=c;
    while(*pc!='\0')
    {
    cout<<*pc<<endl;
    pc=pc+1;
    }
    cout<<pc<<endl;  //输出整个字符串
    }
    这样做如果输入:abc的话,显示结果是
    a
    b
    c
    最后一行没东西
    ---------------------------------------
    因为每次输出一次*pc后,pc均+1,其指向下一位字符。当输出最后一个字符时候,pc指针已经指向'\0'了,此时在打印pc其当然就是空字符串,因为字符串就是以'\0'结尾的。
    但将cout<<pc<<endl;放到while前,因为pc指针指向受字符'a',输入字符串时直到'\0'结束,所以结果是 a b c .
      

  3.   

    cout<<*(p++)<<endl;
       cout<<**pp<<endl;第一个输出是2 是因为在使用p时先用p,然后++,如改为++p,才是4
    **pp,你折下看
    *pp是p的地址
    **pp是p的地址的内容pc=pc+1;
    这句已将指针移到字符的尾了当然没东西呀
      

  4.   

    2,easy!
    1,  cout<<*(p++)<<endl;这里有运算符优先级的问题;
    pp是二级指针,pp的值在开始的时候就指定了,是指针p的地址,也是x[0]地址的地址,是不可变得,然而*pp即指针p是可变得,所以**pp即*p是随着p的改变而改变的。
      

  5.   

    我最近刚学到指针,碰到几个问题,望各位大哥哥教教小弟~~~~谢~~~~~
    1,
    #include<iostream.h>
    void main()
    {
       int x[5]={2,4,6,8,10},*p,**pp;
       p=x;
       pp=&p;
       cout<<*(p++)<<endl;
       cout<<**pp<<endl;
    }
    上试中为何第一个输出是2 ?我老以为是4,不明白为何,p++不是等于p+1吗?
    第二个就简直不明白。2,
    #include<iostream.h>
    void main()
    {
    char *pc;
    char c[5];
    cin>>c;
    pc=c;
    while(*pc!='\0')
    {
    cout<<*pc<<endl;
    pc=pc+1;
    }
    cout<<pc<<endl;  //输出整个字符串
    }
    这样做如果输入:abc的话,显示结果是
    a
    b
    c最后一行没东西啊(就是//输出整个字符串//的那行),为何呢?
    但将cout<<pc<<endl;放到while前,就没事了,百思不得其解,为何如此?万望请教。  
     
     
     回复人: dongcat111(猫人Lara) ( ) 信誉:100  2003-01-04 01:07:00  得分:0 
     
     
      我是这么分析的,你看看对不对:
    1.输出为2我也不懂,你改过++p试过吗?
    至于**pp。首先p是地址,pp是p的地址,也就是“地址的地址”,
    所以pp是二级指针,**pp的内容就是*p的内容。
    2。是不是因为while执行后*pc已经是\0,是无效字符,所以输出不了呢??
    你打算cout什么?一个字符串?还是单个字符?你的程序的功能我有点不解哦还有,偶不是大哥哥来的,呵呵~~
      
     
    Top 
     
     回复人: heartthrob(小荣) ( ) 信誉:100  2003-01-04 01:13:00  得分:0