c语言的数据结构的存储 问题...

● 给定C语言的数据结构
struct T {
int w;
union T { char c; int i; double d; } U;
};
假设char类型变量的存储区大小是1字节,int 类型变量的存储区大小是4字节,double类型变量的存储区大小是8字节,则在不考虑字对齐方式的情况下,为存储一个struct T类型变量所需要的存储区域至少应为 () 字节。
(15)A. 4 B. 8 C. 12 D. 17

首先说下,你的程序定义了2个T,是重复定义,编译不能通过的,把共用体名定义成其它的(例如T2)

接下来说说共用体类型:
共用体类型和结构体类似,都是由不同的数据类型所组成的,区别是结构体类型的变量是分别存放的,而共用体类型的变量是存放在同一段内存空间的。这段内存空间的大小由共用体中成员的类型决定,占据内存空间最大的成员所占的字节数就是共用体变量所占的字节数。(摘自《Visual C++ 开发技术大全》P53)

由这段话可以看出你那个程序里的共用体所占空间应该和double型的一样即8字节, 加上int型的4字节,答案是12字节,选C

不过不知道为什么,用我的VC++6.0写的这个程序:

#include<iostream.h>
struct T {
int w;
union T2 { char c; int i; double d; } U;
};
void main()
{
cout<<sizeof(int)<<", "<<sizeof(double)<<endl;
cout<<sizeof(T)<<endl;
}

输出:
4 8
16

说T类型所占空间是16,不知道为什么,知道的请解释下。

不过你的答案里没有16这个选项,所以可以不用考虑我后面说的。
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-10-17
选c.12
共用体所占的内存的长度是最长成员的长度即为8;
再加上int占4个字节
总共就是12了!
第2个回答  2008-10-17
C

c语言的数据结构的存储 问题...
共用体类型和结构体类似,都是由不同的数据类型所组成的,区别是结构体类型的变量是分别存放的,而共用体类型的变量是存放在同一段内存空间的。这段内存空间的大小由共用体中成员的类型决定,占据内存空间最大的成员所占的字节数就是共用体变量所占的字节数。(摘自《Visual C++ 开发技术大全》P53)由...

C语言数据结构地址问题 很困惑,请知道的帮你分析下。题目如下,
a[6][7]比a[4][7]多2*9=18元素 地址应该大18*3=54 所以存储地址为1153+54=1207

数据结构c语言版问题
按列为主序存放于一个连续的存储空间中 a[10,20]一列10个元素,那么a[6,2],2表示第三列(前面有0,1),前面两列就是20 第三列6个,得到20+6=26,开始地址为200,则200+26=226

数据结构(C语言):已知二维数组A[20][10]采用行序为主方式存储,每个元素...
数组A[N][M],A[0][0]是数组中地址最小的元素。如果A[0][0]存放地址为n,那么A[i][j]存放的地址就是 n+i*M*sizeof(T)+j*sizeof(T) ,sizeof(T)是每个元素所占的存储单元。故可以知道A[18][9]的存储地址是 1000+(18-10)*10*2+(9-5)*2=1168;...

我想了解c语言中内存分配问题方面的知识
一个C程序占用的内存可分为以下几类:(一) 栈 这是由编译器自动分配和释放的区域。主要存储函数的参数,函数的局部变量等。当一个函数开始执行时,该函数所需的实参,局部变量就推入栈中,该函数执行完毕后,之前进入栈中的参数和变量等也都出栈被释放掉。它的运行方式类似于数据结构中的栈。(二) ...

C语言内存管理机制--malloc\/calloc\/free原理与实现
malloc函数用于在系统中动态分配连续的可用内存。它要求内存大小至少为指定的字节数,返回指向内存块起始地址的指针,多次调用不重叠分配地址,实现内存分配和释放。malloc函数的返回值总是字节对齐,适合高效访问C语言数据结构。五、初探实现malloc 一个简单实现的malloc函数直接从未映射区域划出内存,但忽略了...

关于数据结构的问题,用C语言描述
关于数据结构的问题,用C语言描述 60 1.设一函数f(x,y)=(1+A*(e^B\/cosθ)*(1+C*(cosψ)^2),其中θ=(π*x)\/180,ψ=(π*y)\/180,参数A=-0.5,B=-0.4,C=-0.1。x从0变化到89,步长为1,y从0变化到359,步长为1。采用一种数据结... 1. 设一函数 f(x,y)=(1+A*(e^B\/cosθ)*(1...

关于数据结构(C语言版)的两个问题
如果为右括号`)`,则检查`stack`是否为空,如果不为空则弹出栈顶元素,将`top`减一。在遍历结束后,检查`stack`是否为空。如果为空,表示所有括号均匹配,返回1;否则表示存在未匹配的括号,返回0。通过上述程序,可以实现对给定字符串中括号匹配性的判断,对于数据结构(C语言版)中的括号匹配问题,...

c语言版 数据结构问题
1.找到结构的头(H)和尾(R)2.下面是伪代码 while(H在R之前) do begin if data_at[H]!=data_at[R] then return false;\/\/肯定不对称 H<-后继;R<-前驱;end;return true;时间复杂度O(strlen(s))既为表长

C语言(数据结构)怎么用顺序存储的串的0号单元存放串长度?
char里面放的是字符还是数字,是编程者决定的。如果写SString[0]=8,存的就是数字;如果写SString[0]='8',存的就是字符,也就是数字8的ASIIC值

相似回答