我最近刚学到指针,碰到几个问题,望各位大哥哥教教小弟~~~~谢~~~~~
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,
#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.输出为2我也不懂,你改过++p试过吗?
至于**pp。首先p是地址,pp是p的地址,也就是“地址的地址”,
所以pp是二级指针,**pp的内容就是*p的内容。
2。是不是因为while执行后*pc已经是\0,是无效字符,所以输出不了呢??
你打算cout什么?一个字符串?还是单个字符?你的程序的功能我有点不解哦还有,偶不是大哥哥来的,呵呵~~
#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 .
cout<<**pp<<endl;第一个输出是2 是因为在使用p时先用p,然后++,如改为++p,才是4
**pp,你折下看
*pp是p的地址
**pp是p的地址的内容pc=pc+1;
这句已将指针移到字符的尾了当然没东西呀
1, cout<<*(p++)<<endl;这里有运算符优先级的问题;
pp是二级指针,pp的值在开始的时候就指定了,是指针p的地址,也是x[0]地址的地址,是不可变得,然而*pp即指针p是可变得,所以**pp即*p是随着p的改变而改变的。
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