请教指针指向问题?

andywiliang 2008-05-06 08:00:33
int b,c,*p=&b,*a=&c;

如果下面再把*p=a 这样是把指针的地址符赋给指针*p吗?这时*p指向的是*a吗?不是指向b了吗?哪*p指向*a, 而*a又指向c, 哪这样是怎么搞的啦?
...全文
205 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Peterry 2008-05-08
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zhangnewhai 的回复:]
int b,c,*p=&b,*a=&c;
如果下面再把*p=a 这样是把指针的地址符赋给指针*p吗?这时*p指向的是*a吗?不是指向b了吗?哪*p指向*a, 而*a又指向c, 哪这样是怎么搞的啦?
首先这个程序是没有问题的

其中*p = a,这里要搞清楚,*p和a分别代表什么内容,能不能赋值,会不会出现问题。

其中p存储的是b的地址,所以*p就是b,是int型的

而a = 存储的是c的地址,我们知道a是int型的指针,也是int的,所以不会产生类型不mat…
[/Quote]

所有指针都是32位int的,但并不意味着可以把int和XXX*互相赋值,你要把*p = a;这个语句写成*p = (int)a;必须要强制转换的,否则编译器还是会报错的.
况且这么转了之后,整型b的值就变成了a的值,也就是c的地址的值,那谁知道是多少啊,这个题目就没有意义了.
Peterry 2008-05-08
  • 打赏
  • 举报
回复
[Quote=引用楼主 andywiliang 的帖子:]
int b,c,*p=&b,*a=&c;

如果下面再把*p=a 这样是把指针的地址符赋给指针*p吗?这时*p指向的是*a吗?不是指向b了吗?哪*p指向*a, 而*a又指向c, 哪这样是怎么搞的啦?
[/Quote]

如果写*p=a,编译器会报错,无法把int* 转换成int,类型根本就不相同,无法互相赋值.
后面的问题都没有意义了.
andywiliang 2008-05-07
  • 打赏
  • 举报
回复
p=a这样就是把a的地址形赋给p吗?
哪么p和a就是一样的啦,哪a指向c,,,,p也指向C吗?
帅得不敢出门 2008-05-07
  • 打赏
  • 举报
回复
error C2440: '=' : cannot convert from 'int *' to 'int'
zhangnewhai 2008-05-07
  • 打赏
  • 举报
回复
int b,c,*p=&b,*a=&c;
如果下面再把*p=a 这样是把指针的地址符赋给指针*p吗?这时*p指向的是*a吗?不是指向b了吗?哪*p指向*a, 而*a又指向c, 哪这样是怎么搞的啦?

首先这个程序是没有问题的

其中*p = a,这里要搞清楚,*p和a分别代表什么内容,能不能赋值,会不会出现问题。

其中p存储的是b的地址,所以*p就是b,是int型的

而a = 存储的是c的地址,我们知道a是int型的指针,也是int的,所以不会产生类型不match的问题。

所以*p = a,其实就是b = &c,也就是将c的地址赋值给b来存储。

tianjingsha 2008-05-06
  • 打赏
  • 举报
回复
楼主,你的表达出错了。*p,p的意思是不同的。
int b,c,*p=&b,*a=&c;
如果下面再把*p=a
//这本身就是错误的,*p是b的值;*p = a 这句话是错误的
//应该是p= a 才对。

这样是把指针的地址符赋给指针*p吗?
//p是指针,*P是指针p所指地址的值。


lunarfan 2008-05-06
  • 打赏
  • 举报
回复
int b,c,*p=&b,*a=&c;
建议楼主不要这么声明变量
=======================
int b, c;
int *p, *a;

arong1234 2008-05-06
  • 打赏
  • 举报
回复
当然不一样,前者是把p指向a指向得内存
后者是把a指向得内存内得内容复制到p指向得内存中去
[Quote=引用 6 楼 andywiliang 的回复:]
哪p=a 和 *p=*a是不是一样的?
[/Quote]
lunarfan 2008-05-06
  • 打赏
  • 举报
回复
晕我也看错了

*p=a 类型不符
lunarfan 2008-05-06
  • 打赏
  • 举报
回复
这样是把指针的地址符赋给指针*p吗?这时*p指向的是*a吗?不是指向b了吗?哪*p指向*a, 而*a又指向c, 哪这样是怎么搞的啦? 我看晕了
=====================================================================
int b,c,*p=&b,*a=&c;

*p = &b //p指向b
*a=&c //a指向c

如果下面再把*p=a //就是b = a也就是a,b相等。
andywiliang 2008-05-06
  • 打赏
  • 举报
回复
哪p=a 和 *p=*a是不是一样的?
太乙 2008-05-06
  • 打赏
  • 举报
回复
晕,*p=a是不对的。编译是通不过的。
这么说吧:
b = 2 &b = 0x0012BB

c = 3 &c = 0x0012CC

*p = &b p = 0x00PPPP 在0x00PPPP上,存放的是b的地址,即0x0012BB,而p本身根本就是一个内存地址,这个内存地址就是0x00PPPP,所以通过*p ,可以拿到0x00PPPP上的值,即0x0012BB,而0x0012BB上就存放的是b的值2,所以能拿到2.
你这么想,什么东西都放在内存上,内存上都是数,不管是p还是b,

如果你用*p=4,会发生什么呢?
很容易,因为p是0x00PPPP,那么这个4,显然不能写到这个地址上,所以,4写到了0x00PPPP所存的内存地址上,也就是0x0012BB,所以b的值会相应改为4;
如果用*p=*a,那么,很简单,*a是什么,是a上存放的地址的值,即(假如)5。那么,也就等同于*p=5;和上面一样了。

这指针,不要看它指向谁,最好是透过现象看本质。看他的实际内存地址,用vc调试一下就很清楚了!
chlaws 2008-05-06
  • 打赏
  • 举报
回复
靠,没看清,sorry
要是在int b,c,*p=&b,*a=&c;后面再加这句*p=a;
那么这就是错误的.除非p是二级指针
andywiliang 2008-05-06
  • 打赏
  • 举报
回复
楼上看清楚啦,是*p=a不是*p=*a
chlaws 2008-05-06
  • 打赏
  • 举报
回复
int b,c,*p=&b,*a=&c;

如果下面再把*p=a 这样是把指针的地址符赋给指针*p吗?//这应该说是指向了a,说赋值也行吧
这时*p指向的是*a吗?//是的
不是指向b了吗? //不指向b了
哪*p指向*a, 而*a又指向c, 哪这样是怎么搞的啦?
//这开始的时候让p指向b,然后通过p=a改变了p的指向,使p和a指向相同的地址,又因为a是指向c的,所以p就指向c,也就是*p == c;
clhposs 2008-05-06
  • 打赏
  • 举报
回复

int b,c,*p=&b,*a=&c;
*p=a; //*p是取他所指向的变量

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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