C语言中子函数中变量只能用于子函数?
例如:intmax(intx,inty){intz;z=x>y?c:y;teturn(z);}那么我想问的是这个Z是子函数中声明的,那么它只能用在子函数?也就是说当程序跳...
例如:int max(int x ,int y)
{
int z;
z=x>y?c:y;
teturn(z);
}那么我想问的是这个Z是子函数中声明的,那么它只能用在子函数?也就是说当程序跳出子程序那么Z就不起作用了?为什么?
还有对于形参X,Y在(int x,int y)就是对形参的申明吗? 展开
{
int z;
z=x>y?c:y;
teturn(z);
}那么我想问的是这个Z是子函数中声明的,那么它只能用在子函数?也就是说当程序跳出子程序那么Z就不起作用了?为什么?
还有对于形参X,Y在(int x,int y)就是对形参的申明吗? 展开
7个回答
展开全部
楼上的回答都没说到关键,这个问题该从内存管理上来讲,在C语言中内存分配有3中方式,1.从静态存储区(有的人也称之为全局区),2.栈区,3.堆区(亦动态内存分配区)。静态存储区存放的是全局变量,static变量,const变量,编译时由编译器分配。程序结束时由编译器释放,所以全局变量在整个程序运行期间都是有效的。2栈区,主要存放局部变量,楼主函数中的int z;就是在栈区分配的内存,栈区会在函数执行结束是释放,即楼主方法max()结束后释放。3.堆区:手动申请(malloc方法等...),手动释放(free方法等...),第二个问题,这里不是声明,只是签名就是说在调用是要与之签名相同,也有两个参数。
展开全部
形参只是一个逻辑上的申明,实际上没有分配内存。z跳出子程序确实就不起作用了。因为他是函数作用域。但是max函数返回的一个值是确实存在的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
例如:int max(int x ,int y)
{
int z;
z=x>y?c:y;
teturn(z);
}那么我想问的是这个Z是子函数中声明的,那么它只能用在子函数?也就是说当程序跳出子程序那么Z就不起作用了?为什么?
还有对于形参X,Y在(int x,int y)就是对形参的申明吗?
这个问题该从内存管理上来讲,在C语言中内存分配有3中方式,
从静态存储区(有的人也称之为全局区),
2栈区,主要存放局部变量,楼主函数中的int z;就是在栈区分配的内存,栈区会在函数执行结束是释放,即楼主方法max()结束后释放。
3.堆区:手动申请(malloc方法等...),手动释放(free方法等...),
第二个问题,这里不是声明,只是签名就是说在调用是要与之签名相同,也有两个参数。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.第一个对,当程序对出子函数int max(int x ,int y),z所占用的空间就归还给系统堆栈了,这个空间就被系统用作它用了!
2.第二怎么来说呢,可以说声明也可说定义,就看它出现的位置是在函数声明部分还是函数定义部分了,反正就是确定形式参数的类型!
2.第二怎么来说呢,可以说声明也可说定义,就看它出现的位置是在函数声明部分还是函数定义部分了,反正就是确定形式参数的类型!
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Z在子函数中声明,其生存期只在子函数中,跳出去Z就不复存在了。可以说形参就是其声明。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询