BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #36710同步于 2010/3/17
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

关于指针的一个小问题,求解~谢谢!~

zxsword
2010/3/17镜像同步17 回复
问题如下: int ival = val; int *pval=&ival; 那么将int *pval=&ival; 拆分成两句来理解,应该可以如此理解吧?int *pval;*pval=&ival;即*pval的内容为ival的地址,而pval为指向 ival地址 的指针?这样的理解对吗? 如果上述理解正确的话,那么应该有程序中show_pointer(pval)打印值应该为&&ival,而不是&ival,而CSAPP书中的结果为&ival(查看了英文版也是这个答案),具体附图如下: 希望看过CSAPP的同学或C语言大牛能解答下,谢谢了!~
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
zxsword机器人#1 · 2010/3/17
自己沙发,求C语言语法大牛帮忙分析!~
Vampire机器人#2 · 2010/3/17
分成两句应该是 int *pval; pval=&ival;
zxsword机器人#3 · 2010/3/17
首先谢谢了。 我是这样想的 int *pval=&ival;语句中*pval被视为一个整体,=的优先级较低,*pval被视为一个整体的话,就同一个int型变量具有同样的意义,所以直接将*pval视为一个int型变量了,如果int型变量的话,地址也是32位的,地址就被赋给了这个int型变量了,算是钻牛角尖了厄 【 在 Vampire 的大作中提到: 】 : 分成两句应该是 : int *pval; : pval=&ival; : ...................
wqchen机器人#4 · 2010/3/17
【 在 zxsword 的大作中提到: 】 : 首先谢谢了。 : 我是这样想的 : int *pval=&ival;语句中*pval被视为一个整体,=的优先级较低,*pval被视为一个整体的话,就同一个int型变量具有同样的意义,所以直接将*pval视为一个int型变量了,如果int型变量的话,地址也是32位的,地址就被赋给了这个int型变量了,算是钻牛角尖了厄 : ................... 那我bool* pb = ..呢? 定义的时候,有这样的*星号应该就是理解为定义了一个int*类型而不是int类型的变量*pInt
zxsword机器人#5 · 2010/3/17
厄,没看明白 【 在 wqchen 的大作中提到: 】 : 那我bool* pb = ..呢? : 定义的时候,有这样的*星号应该就是理解为定义了一个int*类型而不是int类型的变量*pInt
jmpesp机器人#6 · 2010/3/17
【 在 zxsword 的大作中提到: 】 : 问题如下: : int ival = val; : int *pval=&ival; : ................... show_pointer(pval)跟ival没任何关系 看看这个函数的实现,仅仅只是显示参数变量的地址
zxsword机器人#7 · 2010/3/17
这个我知道的。 问题实际上就是pval和ival的关系。 show_pointer这个函数最后打印的肯定是一个地址或者说一个指针。 【 在 jmpesp 的大作中提到: 】 : : show_pointer(pval)跟ival没任何关系 : 看看这个函数的实现,仅仅只是显示参数变量的地址 : ...................
jmpesp机器人#8 · 2010/3/17
【 在 zxsword 的大作中提到: 】 : 这个我知道的。 : 问题实际上就是pval和ival的关系。 : show_pointer这个函数最后打印的肯定是一个地址或者说一个指针。 你依然不明白我的意思 最后打印的是指针没错 但是打印出来的是参数变量的地址 参数也是有内存空间的 会在栈中分配 所以也是有地址的 跟pval和ival没有任何关系
zxsword机器人#9 · 2010/3/18
确实不明白,厄 根据书中截图所示,打印的值为&ival(第三幅图) 嗯,我猜测,你的意思是不是说,根据C调用规则,参数入栈,打印出来的是这个栈中的地址? ebp<-esp,然后打印ebp+x?还是。。。。 能再详细说说吗? 麻烦你了~~谢谢啦~~ 【 在 jmpesp 的大作中提到: 】 : : 你依然不明白我的意思 : 最后打印的是指针没错 但是打印出来的是参数变量的地址 : ...................