C语言自定义数据类型

一.结构体

1.结构体

I.基本格式

struct tag
{
    member-list;
}variable-list;

II.结构体声明 

struct PERSON              // 结构体声明
{
   int   age;              // 声明成员类型
   long  ss;
   float weight;
   char  name[25];
} family_member;           // 定义结构体变量family_member

 III.结构体的特殊声明

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

//匿名结构体类型
struct
{
    int a;
    char b;
    float c;

}x;

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

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

 在上面代码基础上,下面代码合法吗?

p=&x;

警告:

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

匿名的结构体类型,如果没有对结构体类型重命名的话,基本上只能使用一次。

IV..结构体变量的创建和初始化

int main() {
    //按指定顺序初始化结构体变量
    family_member.weight = 68.5;
    family_member.ss = 1234567890;
    family_member.age = 30;
    strcpy(family_member.name, "John Doe");
    
    //按顺序初始化结构体变量
    struct PERSON family_member={"30,1234567890,68.5,"John Doe""};//和上面的初始化是一样的效果
    
    //打印结构体成员
    printf("Age: %d\n", family_member.age);
    printf("Social Security Number: %ld\n", family_member.ss);
    printf("Weight: %.2f\n", family_member.weight);
    printf("Name: %s\n", family_member.name);

    return 0;
}

VI.结构体成成员访问符

结构体成员访问依据变量的类型的不同,一般有两种访问方式,一种为直接访问,一种为间接访问。直接访问用于访问普通的的结构体变量,间接访问用于指向指向结构体变量的指针。直接访问用结构体变量名.成员名。间接访问使用(*结构体指针名).成员名或者使用结构体指针名->成员名。相同的成员名依靠不同的变量前缀区分。

直接访问:

#include 

struct Person {
    char name[50];
    int age;
};

int main() {
    struct Person person;

    // 设置成员的值
    strcpy(person.name, "John");
    person.age = 30;

    // 访问成员并打印输出
    printf("Name: %s\n", person.name);
    printf("Age: %d\n", person.age);

    return 0;
}

间接访问:

#include 

struct Person {
    char name[50];
    int age;
};

int main() {
    struct Person person;
    struct Person *ptr;

    ptr = &person;

    // 设置成员的值

你可能感兴趣的:(C语言,c语言,开发语言,青少年编程,学习)