c语言如何构造64位变量,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;

注意:

e4a6cbd9ad936bcb923089b8982b3cf7.png

d9d8692ec73d0a96bd1cef16e37aa244.png

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