內(nèi)存對(duì)齊的三大原則:
1>如果結(jié)構(gòu)體里面的成員變量都是基本數(shù)據(jù)類型(int烤蜕,char,float,double,指針),第一個(gè)成員變量從內(nèi)存偏移量為0開始分配问畅;后面的成員變量從內(nèi)存偏移量是它本身的字節(jié)數(shù)的倍數(shù)開始分配;
2>如果成員變量中含有結(jié)構(gòu)體成員變量或者數(shù)組,比如說struct Student{ char sex;int age;};從內(nèi)存偏移量為成員變量字節(jié)數(shù)最大的字節(jié)數(shù)(int)的倍數(shù)開始分配
3>最后收尾的時(shí)候,所有的字節(jié)數(shù)要是最大字節(jié)數(shù)成員變量的倍數(shù)
*/
void test1()
{
//struct Student是我們自己定義的一個(gè)新的數(shù)據(jù)類型
struct Student
{
char name[20];
int age;
float score;
};
//數(shù)據(jù)類型+變量名毅臊;
struct Student stu1={"sq",10,100.0};
struct Student stu2;?
//??? .? 語法:相當(dāng)于‘的’
stu2.age=10;
stu2.score=99.0;
strcpy(stu2.name, "rose");
printf("name=%s\nage=%d\nscore=%f\n",stu1.name,stu1.age,stu1.score);
/*
數(shù)組是一個(gè)集合類:相同類型的變量
結(jié)構(gòu)體也是一個(gè)集合類:可以相同,可以不同類型的變量
*/
}
void test2()
{
struct Student
{
char sex;//0
float score;//4--7
double kill;//8---15
long age;//16--19
};
long size=sizeof(struct Student);
printf("size=%ld\n",size);
}
void test3()
{
struct Birthday
{
int year;//0---3
int month;//4---7
int day;//8---11
};
struct Student
{? ? ? ? int age;//0---3
char name[20];//4----23
struct Birthday birth;//24----35
};
//1.
struct Student stu={10,"sq",{1990,1,1}};
//2.
struct Student stu2;
stu2.age=20;
strcpy(stu2.name,"rose");
stu2.birth.year=2000;
stu2.birth.month=1;
stu2.birth.day=1;
printf("%ld\n",sizeof(struct Student));
}
void test4()
{
//1.
struct Student? ? {
char sex;
int age;
}stu2[3]={{'x',10},{'s',10},{'c',10}};
//2.無名結(jié)構(gòu)體
struct
{
int age;
char name[20];
}stu;
struct
{
int age;
char name[20];
}stu1;
}
void test5()
{
//是將現(xiàn)有的數(shù)據(jù)類型重命名成你想要的數(shù)據(jù)類型
typedef int size;
struct Student
{
char sex;
int age;
};
typedef struct Student Student;
typedef struct Person
{
char sex;
int age;
}Person;
struct Person p={'x',10};
Person p1={'m',20};
}
void test6()
{
typedef struct Student
{
char sex;
int age;
}Student;
Student stu={'x',10};
Student *p=&stu;
(*p).sex='m';
(*p).age=20;? ? printf("sex=%c\nage=%d\n",stu.sex,stu.age);
p->sex='n';
p->age=30;
printf("sex=%c\nage=%d\n",stu.sex,stu.age);
}
/* 將stu[4]={{'x',30},{'x',11},{'x',40},{'x',13}};寫一個(gè)函數(shù)實(shí)現(xiàn)年齡從小到大排序黑界,排序完寫一個(gè)函數(shù)打印信息
*/
typedef struct Student
{
char sex;
int age;
}Student,* pStudent;
/*
typedef struct Student Student;
typedef struct Student * pStudent;
*/
void printInfo(Student stu[],int size)
{
int i=0;
for (; istu[j].age)
{
Student temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
}int main()
{
Student stu[4]={{'v',40},{'x',11},{'f',50},{'m',13}};
//? ? int arr[10]={12,3};
//? ? int size1=sizeof(arr)/sizeof(int);
int size=sizeof(stu)/sizeof(Student);
printf("排序之前:\n");
printInfo(stu,4);
blueSort(stu,4);
`printf("排序之后:\n");? ? printInfo(stu,4);
return 0;
}