C语言学习:结构体的创建和使用

结构体,是C语言学习过程中非常重要的一个部分,特别是在后面学习数据结构的过程中。
首先,结构体,简而言之,就是创建一个模块,这个模块里面包含着需要使用的各种数据类型,将它封装成一个函数类型但又不是一个函数的整体。

对于结构体,需要从以下这几个方面来了解:

  1. 结构体的定义
  2. 如何对结构体进行初始化,赋值
  3. 如何访问结构体里面的数据
  4. 如何判断结构体所占用内存空间的大小

结构体的定义:
结构体是程序员自行定义和使用的

struct mental{
	int age;	//结构体内用来存储数据的变量
	char sex;
	char name[12];
};		//一个存储个人信息的简单结构体

结构体的初始化和赋值:

//创建结构体,定义struct mental 为结构体类型
struct mental{
	int age;
	char sex;
};
//结构体的初始化
struct mental met;//定义一个struct mental类型的met变量
#if 0
//创建结构体类型并初始化,通常选用这种
struct mental{
	int age;
	char sex;
	char name[12];
}met;
#endif
//赋值
/*单个赋值:赋值的时候注意类型,同类型的值只能赋值给同
类型的变量,字符数组的赋值要特别注意*/
met.age = 18;
met.sex = 'w';
strcpy(met.name,"Tomy");

/*整体赋值:直接定义一个struct mental类型的met变量并初始化*/
struct mental met{
	18,
	'w',
	"Tomy"
};//内部以逗号作为分隔符
//以这种方式进行赋值,各个数据的顺序一定要准确

访问结构体内部的数据:
结构体内部数据的访问和平常访问普通变量数据一样,直接调用变量名就可以对结构体数据进行精确的访问,只是访问时需要以定义的结构体类型的变量作为开头,即:met.age

printf("%d\n",met.age);

结构体所占用内存空间的大小
结构体内存大小等于结构体中各个成员所占大小之和。
计算结构体所占空间的大小有两个准则:效率高,省空间
结构体内存空间的是按临近的4字节或2字节来分配的。

struct mental{
	int age;	//int  4个字节
	char sex;	//char 1个字节
	char name[4];//		4个字节
}met;

这个结构体所占用的空间就是12个字节,其中char sex占用一个字节,临近的int age和char name[4]分别占用4个字节,按结构体内数据类型临近的4字节或2字节来分配的.

#include <stdio.h>
#include <string.h>
void main()
{
	struct number{
		double sum;
		int n;
		char ch;
	}num;
	printf("size=%d\n",sizeof(num));
}
输出结果:size=16
该结构体内三种变量占用空间最大的为sum,为double型数据,
占用8个字节,n,ch各占4个字节和1个字节,按临近的4个字节分配,
总共16个字节。
若再在该结构体内加上一个int型变量,该结构体所就会占用20个字节的内存
#include <stdio.h>
#include <string.h>
void main()
{
	struct number{
		double sum;//占用内存空间的前8个字节   0~7
		int n;		// 8~11
		int n1;//加在这里		12~15
		char ch;	//17		按四字节补齐
	}num;
	printf("size=%d\n",sizeof(num));
}
输出结果:20

结构体所占内存大小等于结构体中各个成员占内存大小之和,结构体的内存空间是按临近的数据类型所占字节来进行分配的。
结构体所占内存大小还有些地方有问题,留待后面写篇单独的来解决,这里就不做过多阐述。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值