黑马程序员技术交流社区

标题: 结构体疑问 [打印本页]

作者: cjfire    时间: 2014-9-24 11:45
标题: 结构体疑问
本帖最后由 cjfire 于 2014-9-24 14:40 编辑
  1. #define MAXSIZE 100;
  2. #define OK 1
  3. #define ERROR 0
  4. #define TRUE 1
  5. #define FALSE 0

  6. typedef int Status;
  7. typedef int ElemType;
  8. typedef struct{
  9.     ElemType data;
  10.     int cur;
  11. }Component,StaticList[MAXSIZE];
复制代码

这里定义的是什么意思呢?而且还报错,某书上的源码,不知道为什么?请大神解释一下
作者: cjfire    时间: 2014-9-24 11:46
不好意思,结构体的原文是这样的
  1. struct{
  2.     ElemType data;
  3.     int cur;
  4. }Component,StaticList[MAXSIZE];
复制代码

没有那个stru主要是这里不太懂。
作者: fantacyleo    时间: 2014-9-24 12:15
第一行末尾多了一个分号
作者: AngleMGG    时间: 2014-9-24 12:28
一、结构体的定义
1、定义形式
struct  结构体名称)
{
        类型名 成员名1;
        类型名 成员名2;
        ……
        类型名 成员名n;
};

2、举例——定义一个名为Stru的结构体,共有data、cur两个成员;
//
struct Stru{
        ElemType data;
        int cur;
};
//

二、结构体变量的定义
1、先定义结构体类型,再定义变量
//
struct Stru{
        ElemType data;
        int cur;
};

struct Stru stu;
//

2、定义结构体类型的同时定义变量
//
struct Stru{
        ElemType data;
        int cur;
}stu;
//

3、直接定义结构体类型变量,省略类型名
//
struct {
        ElemType data;
        int cur;
}stu;
//
三种方式都是一样的效果,只是在某些应用不一样。



作者: AngleMGG    时间: 2014-9-24 12:40
首先,#define MAXSIZE 100;这里多了一个分号。其次,定义的变量Component是系统自有变量,不能重定义,改成component就好了。
作者: cjfire    时间: 2014-9-24 14:05
fantacyleo 发表于 2014-9-24 12:15
第一行末尾多了一个分号

没错,问题是在这里,非常感谢。
作者: cjfire    时间: 2014-9-24 14:06
AngleMGG 发表于 2014-9-24 12:40
首先,#define MAXSIZE 100;这里多了一个分号。其次,定义的变量Component是系统自有变量,不能重定义,改 ...

回答的恨棒,我建立的是c不是Foundation,所以没有冲突,啊我结构体那句话是声明了一个Component的类型,并且定义了一个StaticList的变量,是么?
作者: AngleMGG    时间: 2014-9-24 14:23
cjfire 发表于 2014-9-24 14:06
回答的恨棒,我建立的是c不是Foundation,所以没有冲突,啊我结构体那句话是声明了一个Component的类型, ...

我也不知道Component是什么东西,假设像你说的,Component是一种类型,而struct定义的 stru也是一种数据类型,那这句话的意思就是“  类型名  类型名  变量名;”   ,你觉得这格式对吗
作者: cjfire    时间: 2014-9-24 14:40
AngleMGG 发表于 2014-9-24 14:23
我也不知道Component是什么东西,假设像你说的,Component是一种类型,而struct定义的 stru也是一种数据 ...

之前的代码有问题,可能产生误导了,你看看现在这个。
作者: daoqin    时间: 2014-9-24 15:17
因为你使用了typedef ,所以在结构体后面可以有多个名称,当然也可以有结构体数组了!
typedef struct{
    ElemType data;
    int cur;
}Component,StaticList[MAXSIZE];

这个代码可以这么写:
typedef struct Component{
    ElemType data;
    int cur;
}StaticList[MAXSIZE];
Component stu1[20];
如果没有typedef,必须这样写了
struct Component{
    ElemType data;
    int cur;
}StaticList[MAXSIZE];
作者: cjfire    时间: 2014-9-25 09:07
daoqin 发表于 2014-9-24 15:17
因为你使用了typedef ,所以在结构体后面可以有多个名称,当然也可以有结构体数组了!
typedef struct{
    ...

你的意思是Component,StaticList都是类型名?
作者: 闫跃文    时间: 2014-9-25 10:26
你的ElemType 什么意思?component和后边的意思是什么啊,看样子像是类型
作者: 王庆功    时间: 2014-9-25 17:35
是不是第一行多了个分号?你这是在看算法书吧?
作者: AngleMGG    时间: 2014-9-25 17:37
cjfire 发表于 2014-9-25 09:07
你的意思是Component,StaticList都是类型名?

是这样的,要复习一下typedef哦




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2