C语言里关于结构体sizeof的题

作者&投稿:原烁 (若有异议请与网页底部的电邮联系)
关于C语言结构体大小的问题 sizeof~

你的机器是64位按8字节对齐分配空间,因此struct S1是24,分析如下:
struct S1
{
char *a, *b; 8*2
int c; 8*2+4+补4 因为按8字节对齐,所以补齐为8的倍数
char d; 8*2+8+1+补7 同上,结果=24
};
struct S2
{
char a; 1
struct S1 b; 1+补7+24 先补齐成8的倍数,再+struct S1的size
char c; 8+24+1+补7,同上原理,结果=40
};

union是共用体,不是struct
1、union中可以定义多个成员,union的大小由最大的成员的大小决定。
2、union成员共享同一块大小的内存,一次只能使用其中的一个成员。

3、对某一个成员赋值,会覆盖其他成员的值(也不奇怪,因为他们共享一块内存)

结构体大小遵循一下两条原则:
1) 数据对齐原则---内存按结构体成员的先后顺序排列,当排到该成员时,其前面已开辟的空间字节数必须是该成员类型所占字节数的整数倍,如果不够则补齐,依次向后类推。
2) 整体空间是占用空间最大的成员类型所占字节数的整数倍。
struct c{
int x; //4字节

float y; //4字节

}a[3];
a[3]位数组,sizeof(a)计算数组大小位8*3=24
假如结构体改为下面这样:
struct c{
double x; //8字节

char y; //1字节 总:8+1

int z; //4字节,前面字节和位9字节,不满足第一条所以为(9+3)+4=16

}总数16,满足第二条。

当然是3倍sizeof(int)+ sizeof(float)。


c\/c++语言*&s是什么意思s是一个结构体类型在向一个函数传参的时候用*...
在C中代表取值运算符,&代表取地址运算符,两个同时出现时相互抵消。*&s就是s

C语言中关于结构体中next和data什么意思
next和data都是自己定义的变量,一般时候是下一个结构体变量地址和当前这个结构体变量的数据,这样定义是为了便于记忆和观察,也是可以定义别的变量名的,一般这种定义是用在链表的生成。如果我解释的不是很清楚的话,你可以追加提问!

c语言怎么显示已有的结构体定义
从 菜单 查看点击工作空间 左侧选择ClassView标签页就能看到 FileView是查看工程文件的 如果编译通过,结构体的信息会自动显露出,通过使用.或者->,如果编译不通过,系统还没确定结构体是合法的,所以不会自动出现

struct是什么意思在c语言程序中?
struct是C语言中用于定义结构体的关键字。以下是关于struct的 1. 结构体定义 在C语言中,struct关键字用于定义数据结构,这种结构可以包含多个不同类型的数据。结构体允许我们创建一个包含多个不同类型数据的单一数据类型。通过这种方式,我们可以组织数据,使其更符合特定问题的需求。结构体可以包含不同类型...

struct在c语言中是什么意思?
在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。结构体的定义形式为:struct结构体名{ 结构体所包含的变量或数组 };结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员(Member)。例子:struct stu{ char *...

C语言 *s 和s[] 的区别
c语言中%s和%d的区别 s是输出字串,%d是输出整型资料。c语言中%c与%s的区别 c语言中%c格式符表示输出的是字元 ,%s格式符表示输出的是字串。C语言基本构成:1.资料型别 C的资料型别包括:整型、字元型、实型或浮点型(单精度和双精度)、列举型别、阵列型别、结构体型别、共用体型别、指标...

C语言大神,帮我看下。结构体这题是什么意思。不明白开始是int s;就变...
STREC是你声明的结构体类型的名称。该结构体有两个成员,一个是字符数组num,另一个是整型的变量s。你前面定义了,在后面就可以用它去定义相应的变量。比如:STREC *a等等

二级C语言关于结构体的题目
include <stdio.h> include<string.h> struct st{ char a[15];long b;};int main (){ struct st s[111];long end[111];char t[50][14],other[14]={'333'},son[50][14],gson[50][14];char x[11];int n;scanf("%d",&n);getchar();for(int i=0;i<n;i++){ scanf("...

C语言结构体哪里错了???
这里错了,你根本没有输入&s[i].name,当你用%s时就把那个数字也给读掉了,这种情况你最好分开写。如 就可以了

C语言中a->s[i]与a[i].s的区别
a->s[i]是a地址上的结构体成员变量s的第i个元素。写成非指针的方式,就是a[0].s[i];这种写法,要求a和s都必须是指针类型。a[i].s是a地址上,第i个a中的成员变量s。这种写法,要求a必须是指针,而s不一定是指针。对比a[0].s[i]和a[i].s,可以看出,这两个是完全不同的意义。

龙沙区13533961476: C语言 sizeof结构体问题 -
容飘清肺: 在这下载 http://im.qq.com/?ADUIN=419506198&ADSESSION=1180602577&ADTAG=CLIENT.QQ.1595_MainMenu.0 如何点亮qq的新图标“问问”! 第一步: 先把QQ资料里的那个问号点开(就是把你的鼠标指向你自己的头像,然后找到那个...

龙沙区13533961476: C语言中的结构体的大小如何计算 -
容飘清肺: 用sizeof这个操作符来确定你的程序的话如下int size=sizeof(student);由于C语言会对自定义类型进行存储优化,可以实际大小比把结构体里的所有原子类型加起来要大,

龙沙区13533961476: C语言sizeof有关的题目请求帮助 -
容飘清肺: 计算机对内存的管理是以“字”为单位的(许多计算机系统以4个字节为一个“字”).如果在一个“字”中自存放了一个字节,但该“字”中的其他3个字节不会接着存放下一个数据,而会从下一个“字”开始存放其他数据.因此在用sizeof()运算符测量t的长度是,得到的不是理论值9,必然是4的倍数,所以是12.你看谭浩强c程序设计的结构体那章下面有这个注释!

龙沙区13533961476: C语言计算结构体长度问题 -
容飘清肺: struct tt; {int n1;char n2;float n3;//因为4字节对齐,这里是12个字节union uu//这里是个union,所以里面的内容最大的,作为它的大小,所以是用int u1[2],占8个字节{int u1[2];char u2[2];}su; }; 最后的结果,应该是12+8= 20 11是绝对不正确的. 值得注意的是,编译器有些可以设置对齐方式的,会影响结构体的大小

龙沙区13533961476: c语言白痴问题,结构体变量中malloc(sizeof(...))中的sizeof(...)好像没有用啊?(在线) -
容飘清肺: x=(b)malloc(sizeof(a)); 这句没任何问题.sizeof(a)就是结构体的大小(两个int的size之和).如果用sizeof(b)则有问题,因为sizeof(b)只是指针本身的大小.ANSI/ISO C规定:malloc(0)的结果由编译器自己决定,可以返回NULL指针,也可以返...

龙沙区13533961476: c语言里sizeof 对结构使用的话返回的是什么值?最好能举例说明 -
容飘清肺: 结构体的字节数

龙沙区13533961476: 一个c语言问题,今天老师讲的没听懂,求助!关于sizeof函数的,题如下 -
容飘清肺: 这是内存对齐 “数据结构(在这里指student结构体)应该尽可能地在自然边界上对齐.原因在于,为了访问 未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问.” 在你所说的情况下,某个数据结构的大小为4的整数倍时不需要对齐,而此时student为18,为了提高性能,对齐为20

龙沙区13533961476: C语言中sizeof的用法 -
容飘清肺: sizeof(a) 说的是结构体的大小2+1+2=5 sizeof(b)是指针b的大小,它在不同位的机器上占的字节数不同,在你的机器上可能是2了 指针不因为类型的不同而使占的自己数变化 它就是一个整型占的字节数 char *p; int *q; printf("%d\n",sizeof(p)); printf("%d\n",sizeof(q)); 结果都是2,不信自己试试

龙沙区13533961476: C语言试题: 假定一个结构类型的定义为“struct B{int a[5]; char*b;};”,则该类型的理论长度为 - ----. -
容飘清肺: 【正确答案】24 理论长度为:sizeof(int)*5+4; 在C语言中,int类型都占4个字节,char占1个字节.所以答案为4*5+4=24 望采纳~ 有问题再问哦~ o(∩_∩)o

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网