C/C++教程

探究struct中每个类型内存容量的大小及总内存大小的关系

本文主要是介绍探究struct中每个类型内存容量的大小及总内存大小的关系,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

2022.1.27实验

实验目的:探究struct中每个类型内存容量的大小及总内存大小的关系

总实验如下:

#include<stdio.h>
//对结构的研究
struct structure0 {
	double a;	
	char b;
};
struct structure1 {
	char a;	
	double b;
	char c;
};
struct structure2 {
	int a;
	int b;
	double c;
	int d;
	int e;
};
struct structure3 {
	int a;
	int b;
	char c;
};
int main() {
	struct structure1 a;
	struct structure2 b;
	struct structure3 c;
	struct structure0 d; 
	printf("%u=%u+%u+%u?\n",sizeof(a),sizeof(a.a),sizeof(a.b),sizeof(a.c));//多了3 
	printf("a:%p a.a:%p a.b:%p a.c:%p\n",&a,&a.a,&a.b,&a.c);
	printf("%u=%u+%u+%u+%u+%u?\n",sizeof(b),sizeof(b.a),sizeof(b.b),sizeof(b.c),sizeof(b.d),sizeof(b.e));//多了4 
	printf("b:%p b.a:%p b.b:%p b.c:%p b.d:%p b.e:%p\n",&b,&b.a,&b.b,&b.c,&b.d,&b.e);
	printf("%u=%u+%u+%u?\n",sizeof(c),sizeof(c.a),sizeof(c.b),sizeof(c.c));//多了3 
	printf("c:%p c.a:%p c.b:%p c.c:%p\n",&c,&c.a,&c.b,&c.c);//指针地址为元素首地址,连续排列 
	printf("%u=%u+%u?\n",sizeof(d),sizeof(d.a),sizeof(d.b));
	printf("d:%p d.a:%p d.b:%p\n",&d,&d.a,&d.b);
	/*
	猜测1:结构的sizeof与结构中的变量类型有关; 
	猜测2:若结构类型全部一致,则sizeof即为所有类型之和,比如所有四个元素都是int,则是16字节;
	若结构类型中有一个与其它不一样,则sizeof为所有类型之和加上元素个数;经验证猜想2不正确 
	猜测3:当结构中有连续不满4个char类型时,分配给它的都是4个字节地址;
	猜测4:当结构中只有一个char时,和最临近的前面那个类型的大小一样;
	猜测5:当结构中优先级高的在前面则后面默认使用优先级高的地址的大小,比如double在int前则是16;
	若int在double前也是12; 
	*/ 
}

这篇关于探究struct中每个类型内存容量的大小及总内存大小的关系的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!