鱼C论坛

 找回密码
 立即注册
查看: 2273|回复: 15

静态变量问题

[复制链接]
发表于 2013-3-26 21:19:19 | 显示全部楼层 |阅读模式
10鱼币
郝斌老师说 静态变量不能跨函数使用

那我
# include <stdio.h>
void f (int **);
int main (void)
{
int *p;
f(&p);
printf("%d %d", *p, *p+1);
return 0;
}
void f (int **p)
{
int a = 5;
*p = &a;
}

这样 *p+1还是能输出 6   照理不是说 a 的空间已经被释放了  那我加1为什么还能等于6呢?
既然这样也行那又为什么需要 分配动态空间

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-3-26 22:59:09 | 显示全部楼层
我帮你加了点料,结果更奇怪了:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-3-26 22:59:40 | 显示全部楼层
# include <stdio.h>
void f (int **);
int main (void)
{
int *t;
f(&t);
printf("%d %d", *t, *t+1);
printf("\n第二:%p\n",*t);
return 0;
}
void f (int **p)
{
int a = 5;

printf("第一:%p\n",a);
*p = &a;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-3-27 08:17:52 | 显示全部楼层
首先你使用的是指针变量,并不是静态变量静态变量是用static修饰,该指针地址指向变量a的地址,函数传递的是指针的指针,也就是你已经把指针指向了a。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-3-27 09:14:52 | 显示全部楼层
2013-03-27_091019.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-3-27 09:18:08 | 显示全部楼层
楼上正解。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-3-27 10:48:44 | 显示全部楼层
首先,这里没有静态变量啊(题目写错?)
其次,你的程序里的问题和你想表达的问题是一致的,就是一个指针指向一个已经“死亡”的变量并操作它,结果是什么。准确地说,结果是“不确定”的。也就是说,也可能对,也可能错,你这里就幸运地对了。但这样的程序是非常可怕的,比总是出错的程序可怕多了,一个程序每次都错,调试的时候很好还原错误并修改;但这个问题调试的时候不是每次都能重现错误的,所以一旦写完就非常难被发现兵改过来,所以被这个问题耍过的程序员(一般至少被耍了一星期)对这个问题都非常敏感。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-3-27 13:04:31 | 显示全部楼层
这个P是指针吧好吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-3-27 13:19:05 | 显示全部楼层

5楼是正解,局部变量的空间如果被外层的指针指向的话是不会被收回的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-3-27 16:46:28 | 显示全部楼层
f()函数执行完后,a的内存确实被释放了,所谓的释放是指这块内存可以被其他进程使用,这块内存里的数据随时有可能被覆盖。当然,也有可能不会马上被覆盖。指针p指向a的内存,*P是取这块内存的值。如果这块没被其他进程占用,那么还是原来的数,如果被占用了,它的值将不确定。这种写法很危险,要杜绝。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-3-27 20:54:58 | 显示全部楼层
小新110 发表于 2013-3-27 13:19
5楼是正解,局部变量的空间如果被外层的指针指向的话是不会被收回的。

5楼说的是错的,无论有没有指针指向,局部变量都会被回收。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-3-28 00:03:51 | 显示全部楼层
就是,局部变量用完就收回了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-3-28 13:44:40 | 显示全部楼层
bang ni 顶顶
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-3-28 13:51:10 | 显示全部楼层
这是为什么呢~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-8-25 10:35:30 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-8-25 12:41:02 | 显示全部楼层
谢谢:lol:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-29 01:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表