l*******h 发帖数: 3 | 1 这几天学C语言学晕了,都因是看内存管理变量分配的问题.现在看RETURN语句都不顺眼.
比如下面第一个CODE,因为B指针指向栈内存,离开fun2()就失效,所以返回main()的结果
不正确.
int *fun2(void)
{
int b=2;
return &b;
}
main()
{
int *b1=fun2();
printf(“%\n”, *b1);
}
那下面的CODE就对了吗? 变量b在fun1()子程序里不也是在栈内存吗?它离开fun1()子程
序不也无效了吗?怎能指望返回MAIN正确的值呢? RETURN 这个命令是怎么和把什么返回
主函数的?
int fun1(void)
{
int b=2;
return b;
}
main()
{
int b1=fun1();
printf(“%\n”, b1);
} | b********n 发帖数: 609 | 2 faint,你还是继续看书吧。
眼.
【在 l*******h 的大作中提到】 : 这几天学C语言学晕了,都因是看内存管理变量分配的问题.现在看RETURN语句都不顺眼. : 比如下面第一个CODE,因为B指针指向栈内存,离开fun2()就失效,所以返回main()的结果 : 不正确. : int *fun2(void) : { : int b=2; : return &b; : } : main() : {
| l*******h 发帖数: 3 | | b********n 发帖数: 609 | 4 第二个function是return value,就是先使用然后local variable才被处理掉了。而第
一个你是想返回local variable的地址,然后通过地址找值,当然不行。
就好比一张纸上写个数字,先给你看一眼再撕掉当然可以。可如果先撕纸你还能看么?
【在 l*******h 的大作中提到】 : 能给个说法么?书已经看不下去了.
| l*******h 发帖数: 3 | 5 THANKS!
【在 b********n 的大作中提到】 : 第二个function是return value,就是先使用然后local variable才被处理掉了。而第 : 一个你是想返回local variable的地址,然后通过地址找值,当然不行。 : 就好比一张纸上写个数字,先给你看一眼再撕掉当然可以。可如果先撕纸你还能看么?
|
|