unsigned char 与unsigned short转换的一道题,怎么会输出1+2=65534 ?

pengfoo 2012-02-28 01:42:15

#include <stdio.h>
#include <stdlib.h>

unsigned short *Sum(unsigned char a,unsigned char b)
{
unsigned short S=0;
S=a+b;
return &S;
}

int main(void)
{
unsigned short *p=NULL;
unsigned char a=1,b=2;
p=Sum(a,b);
printf("%u+%u",a,b);
printf("=%u",*p);
getchar();
return EXIT_SUCCESS;
}


怎么会输出1+2=65534?想了半天没弄明白?求教各位大侠。
...全文
259 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
feiyuejie 2012-03-11
  • 打赏
  • 举报
回复
p=Sum(a,b);
上面这个语句使p得到一个地址,这个地址指向一个曾经的局部变量,这个局部变量在函数Sum()返回后就被操作系统清理掉了。
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 czh3642210 的回复:]
你那是返回了个局部的指针,在函数调用完的时候,就被释放掉了
[/Quote]
什么叫返回局部指针啊?
应该说返回了一个指针,指针指向栈上的东西,但是栈上的东西在函数返回时已经无效了
guoyu_bo 2012-02-28
  • 打赏
  • 举报
回复
s被返回时内存已经被回收
面包大师 2012-02-28
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20120227/23/92d3a9ba-af73-425b-a9bc-202bed5f2a54.html?seed=2120947140&r=77696252#r_77696252
其他看上面这个帖子5楼的回复
面包大师 2012-02-28
  • 打赏
  • 举报
回复
printf("=%u",a+b);//你直接这样打印,保证没问题
面包大师 2012-02-28
  • 打赏
  • 举报
回复
你那是返回了个局部的指针,在函数调用完的时候,就被释放掉了
  • 打赏
  • 举报
回复
unsigned short S=0;
S=a+b;
return &S;
返回栈上东西?

69,336

社区成员

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

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