? ? ? 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、結構體大小:
- 使用結構體成員中最大的數據類型的長度來對齊。一個成員不會分到多個格子里。
- 從上到下開始對齊運算。只會放到自己數據類型大小的倍數的位置上。
- 數組相當于寫了一堆對應類型的變量。
??????
1111
1011
1000
所以為12
1111 1111
1111 1111
1111 1110
1100 0000
1111 1111
所以為40