请问一个关于传址的问题

zorro0799 2001-07-20 02:42:55
请问,为何retval的地址与val 的不同,应该是一个地址啊,且val的最后结果也不是172
#include<stdio.h>
#include<conio.h>
int Change(char *, short *);
void main()
{
short i=172;
char *msg=(char*)&i;
short val;
clrscr();
printf("msg address %x\n",msg);
printf("&val address %x\n",&val);
printf("val %d\n",val);
printf("msg %x\n",*msg);
Change(msg,&val);
printf("&val address %x\n",&val);
printf("val=%d\n",val);

}
int Change(char *Msg,short *retval)
{
retval=(short*)Msg;
printf("retval address=%x\n",retval);
printf("*retval=%d\n",*retval);
return 1;
}
...全文
68 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
bnwxf 2001-07-22
  • 打赏
  • 举报
回复
终于找到比我强点不多的人了:-)
记得我刚从delphi转回c的时候,写if只用一个等号(只发生逻辑错误),
对指针还敢取地址,再memcpy,程序当时就core dump了。
看看清华影印版的c语言吧,至少我这菜鸟觉得里面的代码写的很专业
yug 2001-07-21
  • 打赏
  • 举报
回复
这里只是由short*-->char*-->short*,中间只是指针的转换,与short和char位数不同并没多大关系
zorro0799 2001-07-21
  • 打赏
  • 举报
回复

short和char位数不同会出现什么情况,给个例子吧
yug 2001-07-20
  • 打赏
  • 举报
回复
注意这里:
retval=(short*)Msg;
这只是修改了指针retval的值,使得retval指向Msg,但并没有修改val的值.
正确的代码应该是:
*retval=*(short*)Msg;

你们是在做作业吗?

garypeng 2001-07-20
  • 打赏
  • 举报
回复
在Change函数中,retval被赋值为Msg的地址,当然与传入时的val的地址不同。

如果想在Change函数中通过指针来改变val的值,应该用
*retval=*Msg之类的赋值方法,注意short和char在内存中的位数是不同的。

你是不是在做测验题呀?
dongyingtao 2001-07-20
  • 打赏
  • 举报
回复
short 和 char 的长度不一样
z_sky 2001-07-20
  • 打赏
  • 举报
回复
哎,可怜,指针给用成这样。

69,379

社区成员

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

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