❶ C语言中的结构体的大小如何计算
用sizeof这个操作符来确定
你的程序的话如下
int
size=sizeof(student);
由于C语言会对自定义类型进行存储优化,可以实际大小比把结构体里的所有原子类型加起来要大,
❷ C语言结构体大小问题求助。
对,编译器会考虑对齐的,你可以把 month改为char型
struct date
{
char month;
int day;
int year;
}birthday;
结果应该还是36的,char要占4个字节
❸ C语言 比较结构体数的元素大小,输出值前加*
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define N 5
struct student
{
char first_n[15];
char last_n[15];
int credit;
} ;
void input()
{
int i;
for (i=0;i<N;i++)
{
printf("Enter data for NO. %d student:\n", i+1);
printf("Enter the first name:");
scanf("%s", &stu[i].first_n);
printf("Enter the last name:");
scanf("%s", &stu[i].last_n);
printf("Enter the credit:");
scanf("%d", &stu[i].credit);
}
}
void print()
{
int i;
printf("\nPrint the data for those students:\n");
int mcredit = -1;
for(i=0;i<N;i++)if(stu[i].credit>mcredit)mcredit=stu[i].credit;
for (i=0;i<N;i++)
{
if(stu[i].credit == mcredit)printf("* ");
else printf(" ");
printf("%d \t %s \t %s \t %d \n", i+1, stu[i].first_n, stu[i].last_n, stu[i].credit );
}
}
int main(void)
{
struct student stu[N];
input();
print();
return 0;
}
❹ 如何求出C语言结构体中各个成员的大小及内存偏移量
#include<stddef.h>//导入头文件<stddef.h>
#defineoffsetof(type,member)//里面自带宏定义offsetof
//type填写结构体类型,member填写成员名称,返回内存偏移量,类型为size_t
//举例如下
typedefstruct{inta,b,c;}struct_t;
//假设在32位机,结构间无空隙
offsetof(struct_t,a)//值为0,相对于整个结构体,无内存偏移量
offsetof(struct_t,b)//值为4,相对于整个结构体,4字节内存偏移量
offsetof(struct_t,c)//值为8,相对于整个结构体,8字节内存偏移量
//示例offsetof底层实现原理(不一定通用)
#defineoffsetof(t,m)(size_t)(&(((t*)0)->m))
❺ C语言里的预编译语句里怎么获取结构体大小
如果s是结构体变量,则sizeof(s)就能测出s的大小;若s是结构体名,则用sizeof(struct s)同样能测出s的大小。都以字节数表示。
❻ C语言--结构体大小
这与编译器的编译选项有关,如果按C语言的本意则结果应为401,但很多编译器都对结构类型的成员变量进行了按4字节或8字节对齐,这样做可以提高数据存储速度,对齐后结构的大小就只能是4或8的整数倍。
❼ 【C语言】如何获取含有指针的结构体的总大小
虽然你定义了结构体,但是不会为结构体的定义分配内存的,分配内存的是结构体的对象,或者说实例,因此,你能知道的是如果申明使用这个结构体会分配多少内存,只需要声明一个对象,然后再查看这个对象的大小就能打到你的目的了:siziof(struct xx), xx就是你定义的结构体的一个对象
❽ 怎么用快速排序法比较结构体数组中成员中字符串的大小比如有一个结构体数组,里面有 char s[1
#include<stdio.h>
#include<string.h>
structA{
chars[10];
intno;
};
intmain(){
structAa[5]={"asd",1,"qwe",2,"zxc",3,"rty",4,"vbn",5};
structA*p[5]={&a[0],&a[1],&a[2],&a[3],&a[4]},*t;
for(inti=1;i<5;i++){
t=p[i];
for(intj=i-1;j>=0;j--)
if(strcmp(t->s,p[j]->s)<0){
p[j+1]=p[j];
p[j]=t;
}
}
for(i=0;i<5;i++)
printf("%d",p[i]->no);
printf(" ");
}
这个程序只是用结构体A做了个排序的例子,至于你要结构体中有我不知道,你自己加吧。
我就加了个no,让你看看结果而已。
❾ C语言结构体大小问题,求指点拜托各位大神
是这样的,首先在VC 6.0编译器的对于结构体数组中元素会按照最宽元素大小进行字节填充,使其4大小的元素总会是是能被4整除的位置,整个结构体的大小总是能被最宽元素的大小整除。 char 是1 ,int 是4. 在你定义的结构体中最宽的元素大小为4 对于第一个M,首偏移为0,经过两个字符数组后为20,然后再经过两个INT 为28;并且aa,bb 首偏移为24,28,是在4能整除的位置上,总大小为28也能被4整 除 对于第二个M ,首偏移为0,经过一个字符数组为10,下一个元素是INT型的,首地址要能被4整除,所以系统自动添加两个填充字节,现在变成12了,然后再两个INT 型的,变成20,最后再一个字符数组,变成30了,但是30不能被4整除,所以填充2个字节使其变成4的倍数,最后变成32了。 可以参看这里: http://ke..com/view/1078660.htm
❿ C语言,如何求已经使用了的结构体的大小
这个一般说来有两种办法:
1)初始化数组并给全部元素赋初值为0(或其它指定值),以后用元素值来判定此元素是否已经使用
2)单独使用一个变量,用来记录已经使用的元素的数量(此种方法较为方便)。