C语言,结构体,结构体大小,

      1、结构体:

        用于存储不同数据类型的多个相关变量,从而形成一个具有独立性的组合数据类型。

结构体的声明:

struct 结构体类型名{

      数据类型 成员1;

      数据类型 成员2;

      数据类型 成员3;

………

}//注意此处的分号

声明:创建了一种自定义的数据类型,这种类型叫做<struct 结构体类型名>è数据类型;

      struct student(){

      char name[32];

      int age;

      char sex;

      double score;

}

struct student è 自定义一个数据类型

定义结构变量:

      struct studet  结构体变量名;

      struct studet stu;

初始化:

      struct student stu ={ “zhangsan”,18 ,’M’,88.8};

使用:

      结构体变量名.成员名:--> 数组名[下标]

      stu.age -->18;

赋值:

      给结构体内容赋值时,只能一个一个成员的去赋值,

      但是可以相同类型的结构体之间可以直接赋值。

结构体指针:

      struct student *p;

      使用指针来进行获取数据

      (*p).sex   -->   ’m’      //基本不用

      p->sex    -->   'm’      //使用这个

/*===============================================
*   文件名称:struct_KT.c
*   创 建 者:WM
*   创建日期:2023年08月15日
*   描    述:结构体基础知识
================================================*/
#include <stdio.h>
#include<string.h>
#include <stdlib.h>
typedef struct student
{
    char name[32];
    int age;
    char sex;
    double score;
}stu,*pstu;

int main(int argc, char *argv[])
{
   // stu s1={"zhangsan",18,'m',88.8},s2;
    //s2=s1;
    // strcpy(s2.name,"lisi");
    // s2.age=19;
    // s2.sex='w';
    // s2.score=29.0;
    stu s3;
    scanf("%s",s3.name);
    scanf("%d",&s3.age);
    //scanf("%*c%c",&s3.sex);//方法1、去除脏字字符'\r'回车
    getchar(); //方法2、去除脏字字符'\r'回车,放在输入数据之前
    scanf("%c",&s3.sex);
    
    scanf("%lf",&s3.score);

    //结构体指针
    pstu p=&s3;
    printf("%s,%d,%c,%.2lf\n",s3.name,s3.age,s3.sex,s3.score);
    printf("%c\n",p->sex);

    pstu k=(struct student *)malloc(sizeof(stu));
    strcpy(k->name,"wangwu");
    puts(k->name);
    free(k);
    return 0;
} 

2、结构体大小:

  1. 使用结构体成员中最大的数据类型的长度来对齐。一个成员不会分到多个格子里。
  2. 从上到下开始对齐运算。只会放到自己数据类型大小的倍数的位置上。
  3. 数组相当于写了一堆对应类型的变量。

      

1111

1011

1000

所以为12

1111 1111

1111 1111

1111 1110

1100 0000

1111 1111

所以为40

猜你喜欢

转载自blog.csdn.net/qq_52119661/article/details/132303398