結構體struct

weixin_34353714發表於2016-09-19

記憶體對齊的三大原則:

1>如果結構體裡面的成員變數都是基本資料型別(int,char,float,double,指標),第一個成員變數從記憶體偏移量為0開始分配;後面的成員變數從記憶體偏移量是它本身的位元組數的倍數開始分配;

2>如果成員變數中含有結構體成員變數或者陣列,比如說struct Student{ char sex;int age;};從記憶體偏移量為成員變數位元組數最大的位元組數(int)的倍數開始分配

3>最後收尾的時候,所有的位元組數要是最大位元組數成員變數的倍數

*/

void test1()

{

//struct Student是我們自己定義的一個新的資料型別

struct Student

{

char name[20];

int age;

float score;

};

//資料型別+變數名;

struct Student stu1={"sq",10,100.0};

struct Student stu2; 

//    語法:相當於‘的’

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);


2921704-20ec2ef903f51a5d.png

/*

陣列是一個集合類:相同型別的變數

結構體也是一個集合類:可以相同,可以不同型別的變數

*/

}

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);


2921704-05ed776c0418cc76.png

}

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));

}


2921704-aa59431f6c92be6a.png

void test4()

{

//1.

struct Student    {

char sex;

int age;

}stu2[3]={{'x',10},{'s',10},{'c',10}};

//2.無名結構體

struct

{

int age;

char name[20];

}stu;

struct

{

int age;

char name[20];

}stu1;

}

void test5()

{

//是將現有的資料型別重新命名成你想要的資料型別

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};

}


2921704-44c8b26b23fb105d.png

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);

}


2921704-ed350f2538e78064.png

/* 將stu[4]={{'x',30},{'x',11},{'x',40},{'x',13}};寫一個函式實現年齡從小到大排序,排序完寫一個函式列印資訊

*/

typedef struct Student

{

char sex;

int age;

}Student,* pStudent;

/*


2921704-d537dc0196be6571.png

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;

}


2921704-8565fb292d39ee61.png

相關文章