❶ 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)單獨使用一個變數,用來記錄已經使用的元素的數量(此種方法較為方便)。