C语言构造类型(结构体)上

一.概述:

            当一个整体由多个数据构成时,我们可以用数组来表示这个整体,但数组有个特点:内部的每一个元素都必须是相同类型的数据。    

        在实际运用中,我们通常需要由不同类型的数据来构成一个整体,比如学生这个整体可以由姓名、年龄、身高等构成,这些数据由不同类型组成,姓名可以是字符串类型,年龄可以整型,身高可以是浮点型。

        为了解决上述问题,C语言提供了一种构造类型来决解上述问题,那就是--结构体,它允许内部的元素是不同类型的。


二.结构体类型:

    1.定义:结构体内部的元数,也就是组成部分,我们称为“成员”;

    2.定义形式为:

        

struct 结构体名{
类型 成员名1;
类型 成员名2;
...
};
struct是关键字,是结构体类型的标志。


例如:

struct Student{
char *name;//姓名
int age;//年龄
float height;//身高
};

定义了叫student(学生)的结构体,供有name、age、height3个成员。(有点面向对象思想)



三.结构体变量的定义:

1.上面只是定义了名字为Student的结构体类型,并非定义了一个结构体的变量,就像int一样,只是一种类型.


2.定义变量的方式:

2.1. 方式1:(这个方式,我比较常用)

struct Student{
char *name;
int age;
};
struct Student stu;

先定义结构体类型,再定义变量.


2.2. 方式2:

struct Student{
char *name;
int age;
}stu;

定义结构体类型的同时定义变量。

结构体变量名为stu;


2.3. 方式3:

struct{

char *name;

int age;

}stu;

直接定义结构体类型变量,省略类型名。

结构体变量名为stu;


注意:

1.不允许对结构体本身递归定义.

struct Student{
int age;
struct Student stu;//错误.
}

2.结构体内可以包含别的结构体

struct Date{
int year;
int month;
int day;
};

struct Student{
char *name;
struct Date birthday;
}

3.定义结构体类型,只是说明了该类型的组成情况,并没有给它分配存储空间,就像系统不为int类型本身分配空间一样。

   只要当定义属于结构体类型的变量时,系统才会分配存储空间给该变量

//以下
struct Student{
char *name;
int age;
};
//以上,并没有分配内存,只是定义类型
//声明类型变量,分配内存空间
struct Student stu;

4.结构体变量占用的内存空间是其成员所占内存之和,而且各成员在内存中按定义的顺序依次排序.

struct Student{
char *name;
int age;
float height;
};

(由于我的电脑是Mac,查看自己电脑是几位系统,在终端上:uname -a 查看:

    x86_64 表示系统为64位

      i686 表示系统32位的

    )

char 占一个字节

int :4个字节

float:4个字节


所以一个Student变量一共占用 1 + 4 +4 =9个字节

除此之外还有个 “内存对齐”.这个先不说。


三.结构体初始化:

将各成员的初值,按顺序地放在一对大括号{ }中,并用逗号分隔,一一对应赋值

struct Student{
char *name;
int age;
};
int main(){
struct Student stu = {"xb",20};

return 0;
}

注意:只能在定义变量的同时,进行初始化赋值,初始化赋值和变量的定义不能分开!!!

struct Student stu;
stu = {"xb",20};

错误!!!


四.结构体的使用.

struct Student{
char *name;
int age;
}
int main(){
struct Student stu = {"xb",20};
printf("%d\n",stu.age); return 0;}



1.结构体的引用是通过  "结构体变量.成员名称" 。

 " . " 称为成员运算符,它在所有运算符中优先级最高。


2.如果某个成员也是结构体变量,可以连续使用成员运算符 "." 访问最低一级成员。

stu.xxx(结构体变量成员).(结构体变量里面的成员);


3.类型相同的结构体变量直接可以进行整体赋值.


struct Student stu1 = {"xb",20};

struct Student stu2 = stu1;


注意:




它们是两个不同的内存空间,stu把内容给一份stu2,它们之间是相互独立,修改其中一个,不会影响各自。


  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值