1.普通结构体
struct name(结构体名){
结构体成员
};
#include <stdio.h> struct node { int a; char *b; }; int main(int argc, char const *argv[]) { struct node n; n.b="abcdefg"; n.a=100; printf("%s\n%d\n",n.b,n.a); return 0; }
2.定义结构体并同时建立变量
struct name(结构体名){
结构体成员
}实例变量;
#include <stdio.h> struct node { int a; char *b; }n,nn; int main(int argc, char const *argv[]) { n.b="abcdefg"; n.a=100; printf("%s\n%d\n",n.b,n.a); return 0; }
3.匿名结构体
struct{
结构体成员
}实例变量;
#include <stdio.h> struct { int a; char *b; }n,nn; int main(int argc, char const *argv[]) { n.b="abcdefg"; n.a=100; printf("%s\n%d\n",n.b,n.a); return 0; }
4.typedef重命名
typedef struct name1结构体名){
结构体成员
}name2(重新定义的名字);
name2=struct name1
#include <stdio.h> typedef struct node { int a; char *b; }node; int main(int argc, char const *argv[]) { node n; n.b="abcdefg"; n.a=100; printf("%s\n%d\n",n.b,n.a); return 0; }
5.typedef省略结构体名字
typedef struct {
结构体成员
}name2(重新定义的名字);
#include <stdio.h> typedef struct { int a; char *b; }node; int main(int argc, char const *argv[]) { node n; n.b="abcdefg"; n.a=100; printf("%s\n%d\n",n.b,n.a); return 0; }
6.结构体数组
和创建普通数组一样创建结构体数组即可
#include <stdio.h> typedef struct node { int a; char *b; }node; int main(int argc, char const *argv[]) { node n[10]; for(int i=0;i<10;i++){ n[i].a=i*i; n[i].b="zbcdef"; } for(int i=0;i<10;i++){ printf("%d\t%s\n",n[i].a,n[i].b); } return 0; }
7.结构体指针
extern void *malloc(unsigned int num_bytes);
首先定义一个结构体指针,但此时只是分配了一个地址,结构体成员变量并没有分配空间,因此使用malloc函数动态分配地址, 返回值是一个void*,因此要强转成你要的类型指针。
结构体成员变量赋值:
假如n是一个结构体指针,*n就是这个实际结构体, (*n).成员名 就可以给结构体成员赋值或者更改,此外C语言为了简便,单独规定了结构体指针的定义方式 n->成员名。两种都是可以的;
#include <stdio.h> typedef struct { int a; char* b; }node; int main(int argc, char const *argv[]) { node *n=(node*)malloc(sizeof(node)); (*n).b="abcdefg"; (*n).a=100; printf("%s\n%d\n",(*n).b,(*n).a); return 0; }
#include <stdio.h> typedef struct { int a; char* b; }node; int main(int argc, char const *argv[]) { node *n=(node*)malloc(sizeof(node)); n->b="abcdefg"; n->a=100; printf("%s\n%d\n",n->b,n->a); return 0; }