| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3665 人关注过本帖
标题:在编译子函数时,是否给形参和其内的局部变量分配内存空间?
只看楼主 加入收藏
蓝梅
Rank: 2
等 级:论坛游民
帖 子:23
专家分:19
注 册:2010-9-6
结帖率:16.67%
收藏
已结贴  问题点数:20 回复次数:7 
在编译子函数时,是否给形参和其内的局部变量分配内存空间?
在编译子函数时,是否给形参和其内的局部变量分配内存空间?如下面程序
#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: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:2
帖 子:1112
专家分:3674
注 册:2010-10-20
收藏
得分:5 
编译时不分配,在执行时分配.

经验积累中............
2010-11-27 12:38
cacker
该用户已被删除
收藏
得分:5 
提示: 作者被禁止或删除 内容自动屏蔽
2010-11-27 13:02
freedgun
Rank: 5Rank: 5
等 级:职业侠客
帖 子:147
专家分:302
注 册:2010-11-11
收藏
得分:5 
来学习的

有什么样的付出,就有什么样的收获!!
2010-11-27 13:13
xiaomarn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:348
专家分:2026
注 册:2009-3-18
收藏
得分:5 
先把编译和运行时搞清楚!
形参没空间,只是为了确定原型,以便在函数调用时,为实参分配空间做准备
实参在运行时堆栈中分配空间,如果是数组,传递的是指针
局部变量的话,一般是不分配空间的,它们位于寄存器中
局部数组的话,空间是预先分配的,位于数据段中,调用函数时(此函数中定义),才将数组拷贝至运行时堆栈
当然,你声明成static就不copy了
其它的同意3楼

2010-11-27 20: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
ts毛毛雨
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-11-4
收藏
得分:0 
个人认为定义的时候是没有分配空间的,调用的时候才分配空间
2012-11-04 16:19
蹲厕所里数蛆
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-2-22
收藏
得分:0 
谭浩强的书在这里让N多人产生疑问~~~~~~~~~~~~
2013-02-22 17:42
快速回复:在编译子函数时,是否给形参和其内的局部变量分配内存空间?
数据加载中...
 
   



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

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