黑马程序员——c语言基础之结构体

来源:互联网 发布:网络上的言论自由 编辑:程序博客网 时间:2024/05/19 12:18

------- android培训、java培训、期待与您交流! ----------

C语言构造类型

构造数据类型是根据已定义的一个或多个数据类型用构造的方法来定义的。也就是说,一个构造类型的值可以分解成若干个“成员”和“元素”。每个“成员”都是一个基本数据类型或又是一个构造类型。

 

定义结构体的方法

一般形式:

struct 结构名{

成员表列

}

注意:最后的“;”不能省

 结构体变量定义有三种方法

1、先定义结构体,然后再定义结构体变量

struct Student{

 

 

}

struct 结构体名 结构体变量名

struct  Student  stu1

表示定义一个Student结构体类型的变量,变量的名称是stu1

stu1因为是Student类型,stu1可以存放学生的学号、姓名、年龄、成绩

struct Student stu2,stu3,stu4;//定义多个结构体变量

 

 

 

 

2、定义结构体的同时,定义结构体变量

struct Student{

 

 

}结构体变量1,结构体变量2....

 

 

3、使用匿名结构体定义结构体变量

struct {

 

 

}结构体变量1,结构体变量2....

 应用:数组的遍历

int main(int argc, const char * argv[]) {    struct Student{        char *name;        float score;    }boys[3]={{"yj",45},{"zbz",62.5},{"sdw",92.5}};    //有一个个循环    float sum = 0.0f;    int count = 0;    for(int i = 0; i<3 ;i++) {        //计算总成绩        sum+=boys[i].score;    //判断乘积是否小于60,如果小于了60,要让计算机+1        if(boys[i].score<60){            count++;        }else if(boys[i].score>=80&&boys[i].score<=100){            printf("姓名:%s,成绩:%.2f\n",boys[i].name,boys[i].score);                }    //判断是否大于80小于100        //如果在,输出           }            printf("平均值:%.2f\n",sum/3);    printf("不及格人数:%d",count);        return 0;}




 

注意:

1、结构体定义完成以后,计算机并不会给结构体分配内存空间

2、会在定义结构体变量后,分配存储空间

 

结构变量中成员的访问方法

结构变量名.成员名

汉子的编码问题

UTF-8 Xcode中默认的中文的编码

国际通用编码 一个汉字占用3个字节

GB2312 GBK 国标 一个汉字占用2个字节

 

结构体存储原理

结构名只能表示一个结构形式,编译系统并不对它分配内存空间,只有当某变量被说明为这种类型的结构时,才对该变量分配存储空间。

结构体占用的内存空间是每个成员占用的字节数之和(考虑对齐问题)。

 

结构体大小的计算方法和步骤

  

1)先找对齐模数

对齐模数 是结构体中基本数据类型中占用字节数最大的那个

2)再计算结构体中的变量各个成员占用的字节和

 

结构数组

数组的元素也可以是结构类型的。因此可以构成结构型数组。结构数组的每一个元素都是具有相同结构类型的下标结构变量。在实际应用中,经常用结构数组来表示具有相同数据结构的一个群体。如一个班的学生档案,一个车间职工的工资表等。

定义

struct 结构名{成员列表}数组名[数组长度]

例如:struct stu{

int num;

char *name;

char sex;

float score;

}boy[5];

 

指向结构体变量的指针

一个指针变量当用来指向一个结构变量时,称之为结构指针变量。结构指针变量的中的值是所指向的结构变量的首地址。通过结构指针即可访问该结构变量,这与数组指针和函数指针的情况是相同的

一般形式为:

struct 结构名 *结构指针变量名

 

指向结构体变量的指针

其访问的一般形式为:

*结构指针变量).成员名

(*p).age

(*p).name

p->age 

P->name

 

#include <stdio.h>struct Car{        int lunzi;    int speed;};void xuche2(struct Car *c1){    c1->lunzi = 2;    c1->speed = 388;}int main(int argc, const char * argv[]) {    struct Car car1 = {4,200};    xuche2(&car1);    printf("%d",car1.speed);    return 0;}

结构体嵌套使用

1)成员也可以又是一个结构,即构成了嵌套的结构

结构体嵌套:结构体定义的里面有其他结构体

结构体不可以嵌套自己变量,可以嵌套指向自己这种类型的指针

struct Date{

int month;

int day;

int year;

 

}

struct stu{

int num;

char *name;

char sex;

struct Date birthday;

float score;

}

结构体嵌套自身的指针

#include <stdio.h>int main(int argc, const char * argv[]) {    struct Person{        char* name;        int age;        struct Person *child;    };    struct Person kim = {"kim",88888888};    struct Person p = {"林志颖",38,&kim};    printf("%s的儿子是%s,年龄是%d",p.name,(*p.child).name,(*p.child).age);    return 0;}



C语言中的枚举类型

基本数据类型

指针

空类型 void

构造类型

数组,构造体

枚举类型

是一种基本数据类型,而不是一种构造类型,因为它不能再分解为任何基本类型。

 

枚举类型定义的一般形式为:

enum 枚举类型名{枚举值表}

在枚举值表中应罗列出所有可用值。这些值也 称为枚举元素。 

枚举变量的值

枚举类型定义完成后,系统会自动给枚举的每个元素都会赋值一个整形的初值

默认初值:从第一个元素开始为0,以后每个元素的值,是上一个元素的值+1

 

#include <stdio.h>int main(int argc, const char * argv[]) {    //定义枚举类型
   enum week {xingqi,xingqi2,xingqi4,    };        enum iColor{kIcolorWhite = 5,kIcolorBlack,kIcolorTHJ        };        enum sex{kSexMan,kSexWomen,kSexYao} isex;        enum iColor iphoneColor;    isex = kSexYao;    iphoneColor = kIcolorBlack;//    枚举是一个基本类型,所以可以是结构体的元素    struct Person{        char *name;        enum sex isex;    }boy1;        return 0;}


typedef 关键字

C语言不仅提供了丰富的数据类型,而且还允许由用户自己定义类型说明符,也就是说允许由用户为数据类型取“别名”。

typedef 定义的一般形式为:

typedef 原类型名 新类型名; 

其中原类型名中含有定义部分,新类型名一般用大写表示,以便于区别。

 

typedef 使用

基本数据类型

用在数组,给数组起别名

给结构体起别名

typedef struct {        int screenSize;        int ram;            }iPHONE;        iPHONE iphone7Plus= {10,8};


给枚举类型起别名

给函数指针


0 0
原创粉丝点击