| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 12513 人关注过本帖, 1 人收藏
标题:结构体全局变量的初始化!
只看楼主 加入收藏
liangjinchao
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:376
专家分:697
注 册:2010-11-8
结帖率:97.44%
收藏(1)
已结贴  问题点数:20 回复次数:9 
结构体全局变量的初始化!
程序代码:
#include"stdio.h"

typedef struct stu{
    int a;
    int b;
    }ST;

ST student;

//student.a=1;   我希望在main函数外对结构体变量进行初始化,但是编译不能通过!求解释......
//student.b=2;    问了一下老师,他说他也不能马上告诉我!

int main()
{
    student.a=1;//如果在main函数里面初始化的话,程序没问题!
    student.b=2;
    printf("%d,%d",student.a,student.b);
    return 0;
}

搜索更多相关主题的帖子: 结构体 
2011-06-24 09:05
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:0 
程序代码:
#include <stdio.h>

typedef struct stu
{
    int a;
    int b;

 }ST;

ST student={1,2};  //这样就可以了,这个赋值的东西很奇怪的,不懂

int main()
{
    printf("%d,%d\n",student.a,student.b);
    return 0;
}

   唯实惟新 至诚致志
2011-06-24 09:16
khaz
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:130
专家分:188
注 册:2011-4-21
收藏
得分:0 
初始化和赋值不是一个概念。
ST student;这句其实已经把成员初始化为0了,因为全局变量如果不显式初始化的话 会自动初始化为0
或者
ST student={1,2};
2011-06-24 09:48
XD_cpp
Rank: 1
来 自:广东
等 级:新手上路
帖 子:8
专家分:1
注 册:2011-6-17
收藏
得分:0 
要加上花括号{}
2011-06-24 09:50
fragileeye
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:107
专家分:387
注 册:2011-5-21
收藏
得分:0 
我是这么猜想的:
先定义一个结构
typedef struct stu
{
    int a;
    int b;
}ST;
全局变量存放在共享区域中,ST student; 那么在共享区域中就开辟一个ST结构的空间N,
同理在main()外部用student.a = 1. student.b = 2也会相应的开辟空间P,Q,并不会在内存N中对a,b赋值
这么一来就有错了,因为调用student.a时看来student并没有定义,或者就会看到student类型不一致且重定义。
根据  VC报错: ①'student' ,missing storage-class or type specifiers
               ②'student'  redefinition; different basic types

[ 本帖最后由 fragileeye 于 2011-6-24 11:00 编辑 ]
2011-06-24 10:57
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:20 
程序代码:
// 在全局空间(即函数体之外)只能执行数据类型、变量、函数等的定义及变量的初始化,其他任何操作都不被允许。

ST student = {1, 2};    // 这种写法是变量定义并初始化,允许出现在全局空间中

ST student;
student.a = 1;          // 这种写法是变量赋值。不允许出现在全局空间中。而编译器会把它当做变量定义来处理,于是会报告缺少类型标识符
2011-06-24 11:23
bccn_1234
Rank: 2
等 级:论坛游民
帖 子:22
专家分:13
注 册:2011-6-11
收藏
得分:0 
回复 6楼 voidx
回答的不错,LZ的老师可以下岗了,这么烂。
2011-06-24 12:14
fragileeye
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:107
专家分:387
注 册:2011-5-21
收藏
得分:0 
以下是引用voidx在2011-6-24 11:23:59的发言:

// 在全局空间(即函数体之外)只能执行数据类型、变量、函数等的定义及变量的初始化,其他任何操作都不被允许。

ST student = {1, 2};    // 这种写法是变量定义并初始化,允许出现在全局空间中

ST student;
student.a = 1;          // 这种写法是变量赋值。不允许出现在全局空间中。而编译器会把它当做变量定义来处理,于是会报告缺少类型标识符

问下有木有关于这方面介绍的资料。。
2011-06-24 14:25
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
回复 8楼 fragileeye
饿~应该挺多的,具体的一时想不起来,不好意思
2011-06-24 14:37
liangjinchao
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:376
专家分:697
注 册:2010-11-8
收藏
得分:0 
回复 7楼 bccn_1234
我看你也挺烂的,所以我看你还是上不了岗了!

因为有了因为,所以有了所以,既然已成既然,何必再说何必
2011-06-24 17:41
快速回复:结构体全局变量的初始化!
数据加载中...
 
   



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

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