unsigned short *Sum( unsigned char a,unsigned char b);关于指针的一些思考

来源:互联网 发布:施乐m225z网络扫描 编辑:程序博客网 时间:2024/06/08 19:33

c语言中的指针实在是令人头疼的事,看了很多有关指针的文章,最近看到这样一道题目,有点恍然大悟就写下了这篇文章,希望对大家有所帮助,也希望指出不足的地方。

首先要说明的是,这道题的答案其实比不是我要讲解的重点,重点是c语言中,指针的传递和返回的问题。我讲解的这道题是有关返回指针的,下面的参考资料中详细的讲解了传递指针的问题。

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

#include <stdio.h>


int main()
{
unsigned short *p=NULL;
unsigned char a=1,b=2;
p=Sum(a,b);
printf("%u+%u",a,b);
printf("=%u\n",*p);
retun 0;
 }

给出的答案是:1+2=65534;但我在自己电脑上运行了结果是:1+2=65408;大家可以试试。先不管最后的结果是什么,这个程序有个很大的问题就是它的return语句。参考博客http://www.cnblogs.com/pied/archive/2010/01/08/1642021.html。返回的是个“栈内存”地址,也就是说这个地址在函数调用结束的时候是会被释放掉,这个地址所指向的变量的数据也会消失,所以导致这个值是无法预料的。这就导致了我的出的结果和给出的答案不一样。

还有就是以前看到过很多关于getmemory函数有关指针的经典例题。大家可以上网搜搜,讲解的很详细。

如果有错之处,恳请大家指出。

下面这个地址给了我们使用static关键字的实例:

http://zhidao.baidu.com/question/479077762.html&__bd_tkn__=78b5573c3d1bd8384e0ea877a2f827b8843889fa8078338d51fed8133ea5c69d362ad36bb4bcda3b39bb3949f6bbe47087ac3af56e60b1f4e7eb60157c5bf4329a60aefe5c0f03de01252708a041b10833019e707823c88aa13f477c022b465dcd667c404ec1a8d8e9078faccbdc8c0ac23726f647a9

原创粉丝点击