| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3665 人关注过本帖
标题:在编译子函数时,是否给形参和其内的局部变量分配内存空间?
取消只看楼主 加入收藏
蓝梅
Rank: 2
等 级:论坛游民
帖 子:23
专家分:19
注 册:2010-9-6
结帖率:16.67%
收藏
已结贴  问题点数:20 回复次数:1 
在编译子函数时,是否给形参和其内的局部变量分配内存空间?
在编译子函数时,是否给形参和其内的局部变量分配内存空间?如下面程序
#include<stdio.h>
void main()
{
void  f(int i,int x);

    int x,i;
    printf("请输入一个整数:");
    scanf("%d",&x);
    for(i=1;i<=x;i++)
    f(i,x);
}

void  f(int i,int x)
{
    int j;
    for(j=1;j<=x-i;j++)printf(" ");
    for(j=1;j<=(1+(i-1)*2);j++)
        printf("%d",i);
        printf("\n");
}
编译时,是否给f()函数的形参 int i,int x 以及其内局部变量int j 分配内存空间。如果编译时分配的话,编译后,第一次运行调用,是否重新分配存储空间。
教材说每次调用函数结束后存储单元释放,下次调用时重新另分配存储单元。
搜索更多相关主题的帖子: 内存 变量 形参 局部 空间 
2010-11-27 11:56
蓝梅
Rank: 2
等 级:论坛游民
帖 子:23
专家分:19
注 册:2010-9-6
收藏
得分:0 
以3楼在编译的时候就确定好栈的大小了,那么栈的大小是根据子函数形参,及其局部变量类型及个数等确定的吗?是否当第一次运行调用时,在内存堆栈段栈随机分配一个以上大小的空间,然后给形参和局部变量在此段分配存储空间;当下一次调用时栈的起始地址和上次栈的起始地址有可能不同?

#include<stdio.h>
void main()
{
void  f(int i,int x);

    int x,i;
    printf("请输入一个整数:");
    scanf("%d",&x);
    for(i=1;i<=x;i++)
    f(i,x);
}
void  f(int i,int x)
{
    int j;
    for(j=1;j<=x-i;j++)printf(" ");
    for(j=1;j<=(1+(i-1)*2);j++)
        printf("%d",i);
        printf("\n");
}

以5楼说法

编译时不给子函数f()函数的形参 int i,int x 以及其内局部变量int j 分配内存空间。
编译时是否给主调函数void main()中的局部变量 int x,i;分配存储空间呢?
谭浩强教材《c程序设计》第三版p40指出,每一个变量被指定一个确定的类型,在编译时就能为其分配相应的存储单元,如指定int a,b;Turbo c编译系统为 a,b分配两个字节,并按整数方式存储数据。


2010-11-28 11:07
快速回复:在编译子函数时,是否给形参和其内的局部变量分配内存空间?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012780 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved