红联Linux门户
Linux帮助

C语言结构的定义

发布时间:2011-07-05 08:15:04来源:红联作者:赵世坤
最近在学习数据结构,最让人头疼的就是新类型的定义,关于结构体的定义我总结了一些规律,希望对大家有帮助!
tyepdef struct{
int data;
//newtype *a;//wrong need special-field
//struct newtype *a//right
//struct newtype a//wrong incomplete type field 'a'
得知一个结论:typedef 的struct结构名也是一个结构,在结构内部使用也比须使用STTUCT修饰,而且必须使用指针形式

}newtype;


typedef struct _new{
int data;
//_new a;//wrong
//_new *a;//wrong
//struct _new a;//wrong
//struct _new *a;//right
}new;
另外为什么不能用原型,而必须用指针,我认为C语言在编译时要给结构体分配内存,可是结构体的大小还不确定(如果用原型的话),但是指针的大小是确定的,没有这个限制,所以应该用指针,实际上很多新类型用的都是指针!
文章评论

共有 8 条评论

  1. sunny8705 于 2012-03-03 10:27:09发表:

    学习

  2. honglianqxw123 于 2012-02-26 09:09:18发表:

    向楼主学习,谢谢。

  3. galips 于 2011-11-22 14:40:23发表:

    typedef struct _new{
    int data;
    //_new a;//wrong
    //_new *a;//wrong
    //struct _new a;//wrong
    //struct _new *a;//right
    }new;
    struct _new a;结构里面名包括自己,就是的包括了
    typedef struct _new{
    int data;
    //_new a;//wrong
    //_new *a;//wrong
    //struct _new a;//wrong
    //struct _new *a;//right
    }new;而这个成员中又包括了一个stuct _new a;
    .
    .
    .
    .
    .
    不是不知道大小,是不管你的电脑有多牛B都放不下这一个结构体。

  4. 流动随风 于 2011-11-22 14:12:31发表:

    我也是个新手,多谢

  5. hml1006 于 2011-07-19 12:30:53发表:

    楼主就是个菜鸟,根本就不理解结构体,不要误导观众。

  6. lgcHR 于 2011-07-13 20:01:26发表:

    楼主需要理解指针型变量,指针型变量从两个方面理解:1、指针变量的值,2、指针变量的地址。指针型变量和普通型变量是一样的都具有相应的内容和相应的地址。指针型变量的内容是所指原型变量的地址,地址是编译时分配的或运行时动态分配的。现在我们就明白了为什么用sizeof得到指针型变量的大小时几乎所有类型的指针型变量的大小都是4(根据编译器不同而不同),因为指针型变量的内容是相应所致原型变量的地址,地址在计算机中宽度都是一样的!!!(申明一下sizeof得到的是内存的大小即内存的区间范围)。指针型变量的地址是系统分配的我们就没必要关心了。
    楼主的结构体定义如下:
    typedef struct _new{
    int data;
    //_new a;//wrong
    //_new *a;//wrong
    //struct _new a;//wrong
    //struct _new *a;//right
    }new;
    我来分析一下 _new a;//wrong _new *a;//wrong,这两种语法本身就是错的没必要讨论。struct _new a;这种做法也是错的,根据我的分析结构体在系统编译时就需要确定大小,而本结构体实际上包含了自身的一个变量,因为这个结构体本身的大小就不确定,那么相应的变量的大小就不确定。struct _new *a这种做法是正确的,我上面说的很清楚指针型变量的大小时确定的,所以这种做法是正确的。但这种做法有道理吗?在C++中类完全可以取代结构体,那么发生类的自身包含就需要一个指向自身的指针型变量。

    这种情况好比蛇吃自己一样,很有趣吧。我的不成熟意见还望大家多多指点。

  7. deepwhite 于 2011-07-08 17:15:18发表:

    refer to c-faq:
    http://c-faq.com/struct/index.html

  8. rchivedz 于 2011-07-05 08:53:49发表:

    向楼主学习