【C语言】结构体指针与结构体数组

C语言 专栏收录该内容
27 篇文章 0 订阅

目录

一、结构体指针

二、结构体数组

1.结构体数组的定义

2.结构体数组的初始化

3.结构体数组的引用

4.结构体数组指针


一、结构体指针

与一般指针类似结构体也可以使用结构体指针进行引用使用。结构体指针的定义方式如下:

struct Student stu = { 1001,"Li Lei",'M',1.87 };  //定义一个Student 的结构体变量stu

struct Student *p=&stu;    //定义一个Student的结构体指针变量来指向stu

当程序中定义了一个指向结构体变量的指针,就可以通过“指针名->成员变量名”的方式访问结构体变量的成员。 

实例演示:

#include <stdio.h>

typedef char NAME[10];
typedef double DOU;
typedef struct Student
{
    int num;
    NAME name;
    char sex;
    DOU height;

}Stu;


int main() {
    Stu stu = { 1001,"Li Lei",'M',1.87 };
    Stu* p = &stu;
    printf("学生信息:\n");
    printf("学号:%d\n", p->num);
    printf("姓名:%s\n", p->name);
    printf("性别:%c\n", p->sex);
    printf("年龄:%.2lf\n", p->height);
}

运行结果:


二、结构体数组

1.结构体数组的定义

一个结构体变量只能存储一组信息,如果要存储大量的信息,则可以定义一个结构体数组进行存储。

定义结构体数组的方式有三种:

①先定义结构体类型,后定义结构体数组

struct Student
{
    int num;
    char name[10];
    char sex;
    double height;

};

struct Student stus[20];

②在定义结构体类型的同时定义结构体数组

struct Student
{
    int num;
    char name[10];
    char sex;
    double height;

}stus[20];

③直接定义结构体数组

struct
{
    int num;
    char name[10];
    char sex;
    double height;

}stus[20];

2.结构体数组的初始化

结构体数组与一般数组类似,都通过为元素赋值的方式完成初始化。由于结构体数组中的每个元素都是一个结构体变量,因此,在为每个元素赋值时,需要将其成员的值依次放到一对大括号中。

结构体数组的初始化方式:

①先定义结构体类型,后定义并初始化结构体数组

struct Student
{
    int num;
    char name[10];
    char sex;
    double height;

};

struct Student stu1[3] = { {1001,"Li Lei",'M',1.78},
                            {1002,"Li Hua",'M',1.87},
                            {1003,"Han Mei",'W',1.65}
                          };

②在定义结构体类型的同时定义结构体数组并初始化

struct Student
{
    int num;
    char name[10];
    char sex;
    double height;

}stu1[3] = { {1001,"Li Lei",'M',1.78},
             {1002,"Li Hua",'M',1.87},
             {1003,"Han Mei",'W',1.65}
            };

使用这种方式初始化结构体数组时,可以不指定结构体数组的长度,系统在编译时,会自动根据初始化的值决定结构体数组的长度。

3.结构体数组的引用

结构体数组的引用是指对结构体数组元素的引用,由于每个结构体数组元素都是一个结构体变量,因此结构体数组元素的引用于结构体变量类似。

实例演示:

#include <stdio.h>

struct Student
{
    int num;
    char name[10];
    char sex;
    double height;

};

struct Student stus[3] = { {1001,"Li Lei",'M',1.78},
                            {1002,"Li Hua",'M',1.87},
                            {1003,"Han Mei",'W',1.65}

                            };

int main() {
    for (int i = 0; i < 3; i++) {
        printf("学生%d的信息\n", i + 1);
        printf("学号:%d\n", stus[i].num);
        printf("姓名:%s\n", stus[i].name);
        printf("性别:%c\n", stus[i].sex);
        printf("身高:%.2lf\n", stus[i].height);
        printf("\n");
    }
   
}

运行结果:

4.结构体数组指针

指针可以指向结构体数组,即将结构体数组的起始地址赋给指针变量,这种指针就是结构体数组指针。

实例演示:

#include <stdio.h>

struct Student
{
    int num;
    char name[10];
    char sex;
    double height;

};

struct Student stus[3] = { {1001,"Li Lei",'M',1.78},
                            {1002,"Li Hua",'M',1.87},
                            {1003,"Han Mei",'W',1.65}

                            };

int main() {
    struct Student* p=stus ;//定义结构体数组指针p指向结构体数组stus
   
    for (int i = 0; i < 3; i++) {
        printf("学生%d的信息\n", i + 1);
        printf("学号:%d\n", p->num);
        printf("姓名:%s\n", p->name);
        printf("性别:%c\n", p->sex);
        printf("身高:%.2lf\n", p->height);
        printf("\n");
        p++;
    }

}

运行结果:

结构体数组指针从定义上看,它和结构体指针没什么区别,只不过指向的是结构体数组。

 

 

  • 4
    点赞
  • 1
    评论
  • 4
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值