C++struct结构类型

来源:互联网 发布:全国矢量数据免费下载 编辑:程序博客网 时间:2024/05/16 12:54

定义结构用关键字struct创建,stuct aaa{int achar b};定义结构的时候他里面的变量类型都是没有存储到计算机的内存中的,如图:

现在我们来使用以下定义的这个结构数据类型看看他在计算机中的内存以及他的所有成员在计算机中占去内存的情况:

从上面分析可以得知,struct定义的数据类型并没有直接分配到计算机内存的,当我们用struct的类型定义新的数据时候才把他放到内存的,而且stuct里面的数据类型都是相邻分配的,struct的指针就是第一个类型的指针,那么stuct的值是不是第一个数据类型的值呢,我们现在来做一个实验:

当我们想打印出他的值的时候提示错误说没有这个类型的表达式,这是因为cpp默认只打印int charfloat bool类型的数据的,struct是一个扩展类型的数据,所以要直接打出他是不能的,用他的值的时候只能在结构的后面加上.变量aaaa.aa,这里我们知道了aaaa结构的指针就是第一个类型的指针;现在在结构中加一个数组进去看看情况:

 

 

 

 

 

 

 

 

对定义中的数组不进行复制观察他的情况:

看到了三个数据的指针都是相隔4个字节,bbbbbii,此时bb在第一位置,现在来换下位置看看:

 

结果还是一样每个相隔4个字节,现在我在struct内部加一个double类型去看看情况:

现在我们发现了问题了,用sizeof来看看bbb的大小:大小还是1看不出问题,现在用short看看情况:

结果表明:short类型没有被强制转换,只有char类型被强制放大了内存占4个字节,结构里面的数据类型在计算机内存中都是相邻的,只是有的类型被强制放大了!

 

 

结构把内存放到堆里面的方法:

Struct a{int achar b}a *p=new  a;结构使用用.进行指定某个数据类型,结构不能直接当数据输出,输出要用到cpp原始类型,int char float bool;结构被放到堆里面,里面的数据类型都全部放到堆里了,因为他们都是在结构里面的嘛!这里我都不谈赋值问题的!

原创粉丝点击