| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5049 人关注过本帖
标题:【求助】结构体全局变量赋值【已解决】
只看楼主 加入收藏
frank2014
Rank: 1
等 级:新手上路
帖 子:14
专家分:5
注 册:2010-1-16
结帖率:50%
收藏
已结贴  问题点数:10 回复次数:2 
【求助】结构体全局变量赋值【已解决】
//此程序运行在Win7下的vc++6.0中

#include <stdio.h>
#include <string.h>

struct tree
{
    int x;
    char s[20];
}t;   //定义一个全局结构体变量t

void Func(struct tree t)   //这里给出了函数变量t的定义,所以t是一个局部变量
{
    t.x = 10;
    strcpy(t.s,"computer");
}   //定义一个函数,给t赋值

int main()
{
    t.x =1;
    strcpy(t.s, "Micro");
    Func(t);  //调用Funt()函数后应该修改了全局变量t的值,使t.x=10, t.s=computer
    printf("%d,%s\n", t.x, t.s);   //但此时却输出        t.x=1,  t.s=Micro
}
===========================================================================================================
============================================================================================================
(先要谢谢heartnheart的帮助,帮我加深了对变量作用域的理解,谢谢啦

【总结】:
1、首先在与main()平行的位置定义了一个“全局结构体变量”t, 它的作用域是整个程序的运行中都是起作用的,这一点是正确的,因为在main()中可以对t进行赋值

2、正如【heartnheart】所说,Func修改的不过是t的一个副本,这个副本在Func结束时就没了。
   也就是说Func()函数中的变量虽然也叫t,但它是Func()函数自身所定义的变量,【其定义的位置在Func(uct tree t)处】因而是一个局部变量,并不是开始定义的“全局结构体变量t”。

3、Thanks heartnheart again. 在交流中进步真是非常快的啊。

[ 本帖最后由 frank2014 于 2010-2-21 17:30 编辑 ]
搜索更多相关主题的帖子: 赋值 全局 结构体 变量 
2010-02-21 10:41
heartnheart
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:335
专家分:1096
注 册:2009-7-10
收藏
得分:10 
C中的结构是按值传递的,就像基本数据类型一样,如int,所以Func修改的不过是t的一个副本,这个副本在Func结束时就没了。t并未做任何改变。你要是想改变t
有两种方法:
1:让Func返回修改的t并付给t   即t = Func(t);
2:不修改Func返回类型,但是传递指针。
2010-02-21 11:37
ldg628
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:3
帖 子:526
专家分:3036
注 册:2009-6-23
收藏
得分:0 
他们不是同一个数据,全局变量存储在数据段上,而函数的参数是局部变量,存储在栈上,当调用此函数结束后,函数返回,栈又恢复为调用此函数之前的样子,数据被冲掉了,但没有操作到全局变量
2010-02-26 14:58
快速回复:【求助】结构体全局变量赋值【已解决】
数据加载中...
 
   



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

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