返回信息流问题如下:
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语言大牛能解答下,谢谢了!~
这是一条镜像帖。来源:北邮人论坛 / cpp / #36710同步于 2010/3/17
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
关于指针的一个小问题,求解~谢谢!~
zxsword
2010/3/17镜像同步17 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
首先谢谢了。
我是这样想的
int *pval=&ival;语句中*pval被视为一个整体,=的优先级较低,*pval被视为一个整体的话,就同一个int型变量具有同样的意义,所以直接将*pval视为一个int型变量了,如果int型变量的话,地址也是32位的,地址就被赋给了这个int型变量了,算是钻牛角尖了厄
【 在 Vampire 的大作中提到: 】
: 分成两句应该是
: int *pval;
: pval=&ival;
: ...................
【 在 zxsword 的大作中提到: 】
: 首先谢谢了。
: 我是这样想的
: int *pval=&ival;语句中*pval被视为一个整体,=的优先级较低,*pval被视为一个整体的话,就同一个int型变量具有同样的意义,所以直接将*pval视为一个int型变量了,如果int型变量的话,地址也是32位的,地址就被赋给了这个int型变量了,算是钻牛角尖了厄
: ...................
那我bool* pb = ..呢?
定义的时候,有这样的*星号应该就是理解为定义了一个int*类型而不是int类型的变量*pInt
厄,没看明白
【 在 wqchen 的大作中提到: 】
: 那我bool* pb = ..呢?
: 定义的时候,有这样的*星号应该就是理解为定义了一个int*类型而不是int类型的变量*pInt
【 在 zxsword 的大作中提到: 】
: 问题如下:
: int ival = val;
: int *pval=&ival;
: ...................
show_pointer(pval)跟ival没任何关系
看看这个函数的实现,仅仅只是显示参数变量的地址
这个我知道的。
问题实际上就是pval和ival的关系。
show_pointer这个函数最后打印的肯定是一个地址或者说一个指针。
【 在 jmpesp 的大作中提到: 】
:
: show_pointer(pval)跟ival没任何关系
: 看看这个函数的实现,仅仅只是显示参数变量的地址
: ...................
【 在 zxsword 的大作中提到: 】
: 这个我知道的。
: 问题实际上就是pval和ival的关系。
: show_pointer这个函数最后打印的肯定是一个地址或者说一个指针。
你依然不明白我的意思
最后打印的是指针没错 但是打印出来的是参数变量的地址
参数也是有内存空间的 会在栈中分配 所以也是有地址的 跟pval和ival没有任何关系
确实不明白,厄
根据书中截图所示,打印的值为&ival(第三幅图)
嗯,我猜测,你的意思是不是说,根据C调用规则,参数入栈,打印出来的是这个栈中的地址?
ebp<-esp,然后打印ebp+x?还是。。。。
能再详细说说吗?
麻烦你了~~谢谢啦~~
【 在 jmpesp 的大作中提到: 】
:
: 你依然不明白我的意思
: 最后打印的是指针没错 但是打印出来的是参数变量的地址
: ...................