文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>结构体知识点

结构体知识点

时间:2010-11-21  来源:orochi_cgj

结构声明:

struct tag {
      member-list;
} variable-list



struct {
    int a;
    char b;
    float c;
}x;

struct {
    int a;
    char b;
    float c;
}y[20],*p;

这两个声明会被编译器认作不一样的类型(即使他们有相同的成员列表),所以下面这样是非法的:
    p = &x


要解决上面的问题,可以这样:



struct example {
   int a;
   char b;
   float c;
};
struct example x,y[20],*p;


使用结构时的一种很有用的技巧:



typedef struct{
    int a;
    char b;
    float c;
}example;
example x;
example y[20],*p;



对结构的访问

如果是普通变量,通过 . 操作符访问
x.a;
y[0].b;


如果是指向结构的指针

首先要对指针使用间接访问,获得这个结构,然后使用点操作符访问他的成员

(*p).a;

但更方便的是用指向操作符

p->a;



结构的自引用
   自引用:当一个结构体中有一个或是多个成员是指针,它们的基类型就是本结构体类型时,通常这种结构体称为"引用自身的结构体".


struct example {
    int a;
    char b;
    struct example c;
};
这种类型的自引用是非法的,因为成员C是另一个完整的结构,其内部还将包含自己的成员C。这样一直循环下去永无止境。

struct example {
    int a;

    char b;

    struct example *p;

};

这样声明是正确的,因为编译器在结构的长度确定之前就已经知道了指针的长度。

        


插播(指向任何类型的指针的长度都是一样的)
#include <stdio.h>

int main() {
        int *p1;
        char *p2;
        float *p3;
        double *p4;
        printf("%d\n",sizeof(p1));
        printf("%d\n",sizeof(p2));
        printf("%d\n",sizeof(p3));
        printf("%d\n",sizeof(p4));
}
输出值:
4
4
4
4
     


typedef struct {
    int a;
    char b;
    example *p;
}example;
这是非法的,因为类型名知道声明的末尾才被定义,在结构的内部使用尚未定义的类型是不正确的


机构的初始化

struct example{
    int a[3];
    char b;
    float c;
}x={{1,2,3},
    a,
    2.3
   }


相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载