1、在外部声明一个新的结构类型,这种结构在任何函数内都可以使用。声明结构变量的时候需要带上struct+结构类名+变量名。
#include <stdio.h>
struct mys
{
char *name;
int age;
char *gender;
};
int main(){
struct mys heihei;
heihei.name = "rainn";
heihei.age = 25;
heihei.gender = "man";
}
2、在函数内部声明一个新的结构类型
#include <stdio.h>
int main(){
struct mys
{
char *name;
int age;
char *gender;
};
struct mys heihei;
heihei.name = "rainn";
heihei.age = 25;
heihei.gender = "man";
}
这种仅在该函数内部可以使用,声明结构变量同上。
3、声明结构类型的时候同时声明变量
#include <stdio.h>
int main(){
struct mys
{
char *name;
int age;
char *gender;
} mys1;
struct {
char *job;
struct mys one;
} heihei;
heihei.job = "programmer";
heihei.one.name = "heihei";
heihei.one.age = 25;
heihei.one.gender = "man";
}
*4类型定义。
将结构类型定义在本地头文件中,然后引入之后直接使用,不需要关键字struct。在头文件test.h中定义
typedef struct {
char *name;
int age;
} mys;
然后在.c中引入。当然也可以直接在.c文件中写typedef。
#include <stdio.h>
#include "test.h"
int main()
{
mys one;
one.name = (mys){.name = "heihei"};
one.age = 25;
}
结构变量初始化
#include <stdio.h>
int main(){
struct mys
{
char *name;
int age;
char *gender;
} Tom;
struct {
char *job;
struct mys one;
} heihei, *p;
Tom = (struct mys){"Tom",18,"man"};
heihei.job = "programmer";
p = &heihei;
(*p).one = (struct mys){"heihei", 25};
p->one.gender = "man";
// p->one = (struct mys){.gender = "man"};
//----与上上行的初始化为全部成员初始化,此处若执行则除了gender其他为0/null
printf("%s\n", (*p).job);
printf("%s\n", p->one.name);
printf("%d\n", p->one.age);
printf("%s\n", p->one.gender);
}
由此看到结构体内部也是可以放结构体成员,还有->操作是可以由指针指向结构体。且与数组不同的是,结构体本身并不是指针,所以取结构体地址的时候需要加上&符号