免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5496 | 回复: 9
打印 上一主题 下一主题

关于全局变量初始化的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-08-25 09:21 |只看该作者 |倒序浏览
本帖最后由 luoyan_xy 于 2010-08-25 09:57 编辑

在如下的一个文件中
struct my_struct {
    int a;
    int b;
    char *c;
};

struct my_struct my;

my.a = 1;
my.b = 2;
my.c ="hello world";

int main(void)
{
.....
}
这样的代码在编译时会出错,错误主要集中在对全局变量my的初始化语句上,我后来查到可以通过静态初始化的方法对变量初始化,
但是我没弄明白为什么我不能够动态修改全局变量的值,是因为这几条语句得不到执行的关系吗?
现在比较大的疑惑就是,如果因为得不到执行,那为什么定义全局变量的语句能够成功呢?

问题可能过于幼稚。。 还请见谅。。。

论坛徽章:
0
2 [报告]
发表于 2010-08-25 09:41 |只看该作者
my->a = 1;
my->b = 2;
my ->c ="hello world";

应该是
my.a = 1;
my.b = 2;
my.c ="hello world";


使用"."运算符时,它的左边应当是一个结构变量名,当使用"->"运算符时,它的左边应该是一个指向某结构变量的指针。

论坛徽章:
0
3 [报告]
发表于 2010-08-25 09:42 |只看该作者

  1. int main()
  2. {
  3.     my->a = 1;
  4.     my->b = 2;
  5.     my ->c ="hello world";
  6. }
复制代码
struct my_struct my;是定义,可以放到函数体外,赋值语句要放到函数体内

论坛徽章:
0
4 [报告]
发表于 2010-08-25 09:47 |只看该作者
struct my_struct my
{
    .a = 1;
    .b = 2;
    .c = "hello world";
};

论坛徽章:
0
5 [报告]
发表于 2010-08-25 09:59 |只看该作者
回复 3# ljysyn


    恩,赋值语句放在函数体内肯定是没问题呢,但能不能说下函数体外的定义语句是怎么实现的吗,就是编译器什么时候知道以及怎样知道这个变量的定义的?

论坛徽章:
0
6 [报告]
发表于 2010-08-25 10:26 |只看该作者
1、如果用常量给全局变量赋值,可以在声明全局变量的时候,就对其赋值。
2、如果要用变量给全局变量赋值,赋值语句,必须写在程序里面。

论坛徽章:
2
CU十二周年纪念徽章
日期:2013-10-24 15:41:34处女座
日期:2013-12-27 22:22:41
7 [报告]
发表于 2010-08-25 15:56 |只看该作者
在声明时赋值是一种特殊行为,搭着声明的风顺便把值也赋了。

在声明以外的地方赋值那可是语句啊,C语言是由函数组成的,不是由语句组成的。把语句放到任何函数外,程序要在什么时候执行它呢?

论坛徽章:
0
8 [报告]
发表于 2010-08-26 18:04 |只看该作者
mark

论坛徽章:
0
9 [报告]
发表于 2010-08-27 12:58 |只看该作者
全局变量定义时赋值可以的,,,如果先定义不赋值,再赋值的话,应该是程序执行不到这块了,在编译的过程中首先确定该程序的进程空间一些分段,而在分段分配时如果变量定义时有赋值直接放进去,没有赋值的话也就空置一片空间给它,,,如果不是定义时赋值的话,要放到函数体去赋值了,,,

论坛徽章:
0
10 [报告]
发表于 2010-08-29 00:06 |只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP