自定义类型 结构体类型创建 结构体初始化

结构体

结构体的基础知识:

结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。

结构体的声明:

struct tag //struct是结构体关键字,tag为结构体标签
{
    member-list; //成员列表
}variable-list;//变量列表

例如描写一个学生

struct Stu 
{
    char name[20]; //名字
    int age;//年龄
    char sex[5];//性别
    char id[20];//学号
}; //分号不能丢

特殊的声明

在声明结构的时候,可以为不完全的声明。

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

上面两个结构在声明的时候省略了结构体标签(tag)。

在上面代码的基础上:令 p=&x;是非法的

编译器会把上面的两个声明当成完全不同的两个类型。所以是非法的。

结构体成员

结构体的成员可以是标量,数组,指针,甚至是其他结构体。

扫描二维码关注公众号,回复: 3895225 查看本文章

结构体成员的访问

1.点( . )操作符

struct S s; 
strcpy(s.name, "zhangsan");//使用 . 访问name成员
s.age = 20;//使用 . 访问age成员

2.指向(->)操作符

struct S
{
  char name[20];
  int age;
}s;
 
void print(struct S* ps)
{
  printf("name = %s  age = %d\n",(ps->name,ps->age);
}

结构的自引用

typedef struct Node 
{
    int data;
    struct Node* next; 
}Node;

结构体变量的定义和初始化

有了结构体类型,定义变量就变得很简单。

struct Point 
{
    int x;    int y; 
}p1;                //声明类型的同时定义变量p1
struct Point p2;    // 定义结构体变量p2

//初始化:定义变量的同时赋初值。
struct Point p3 = {x, y};

struct Stu        // 类型声明
{
    char name[15];//名字
    int age;      // 年龄
}; 

struct Stu s = {"zhangsan", 20};// 初始化
struct Node 
{
    int data;
    struct Point p;
    struct Node* next;  
}n1 = {10, {4,5}, NULL};            // 结构体嵌套初始化

struct Node n2 = {20, {5, 6}, NULL};// 结构体嵌套初始化

猜你喜欢

转载自blog.csdn.net/Damn_Yang/article/details/82779467