結構體struct
記憶體對齊的三大原則:
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);
/*
陣列是一個集合類:相同型別的變數
結構體也是一個集合類:可以相同,可以不同型別的變數
*/
}
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.無名結構體
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};
}
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}};寫一個函式實現年齡從小到大排序,排序完寫一個函式列印資訊
*/
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;
}
相關文章
- 結構 STRUCTStruct
- Golang 學習——結構體 struct (一)Golang結構體Struct
- Golang 學習——結構體 struct (二)Golang結構體Struct
- go 結構體 (struct) 和方法 (method)Go結構體Struct
- 瞭解下C# 結構體(Struct)C#結構體Struct
- 結構體定義:struct與typedef struct 用法詳解和用法小結結構體Struct
- struct 結構體 -Go 學習記錄Struct結構體Go
- golang 學習之路之 struct 結構體GolangStruct結構體
- C++ struct結構體記憶體對齊C++Struct結構體記憶體
- 上下文 Context 與結構體 StructContext結構體Struct
- pat—結構體排序(用map彌補struct缺陷)結構體排序Struct
- C++ 結構體struct和共同體union的區別C++結構體Struct
- 結構體定義 typedef struct 用法詳解和用法小結結構體Struct
- C語言中結構體struct的對齊問題C語言結構體Struct
- C# 中的只讀結構體(readonly struct)C#結構體Struct
- 認知結構(C# Struct)C#Struct
- struct結構體大小的計算(記憶體對齊)Struct結構體記憶體
- Solidity語言學習筆記————15、結構體StructSolid筆記結構體Struct
- fstat函式及struct stat結構函式Struct
- struct 和 interface:結構體與介面都實現了哪些功能?Struct結構體
- 有關struct timeval結構體 以及 gettimeofday()函式Struct結構體函式
- mysql表結構自動生成golang structMySqlGolangStruct
- c#之結構struct(2)_小記C#Struct
- [swift 進階]讀書筆記-第五章:結構體和類 C5P3_結構體(struct)Swift筆記結構體Struct
- Golang中struct結構標籤(Tag)的使用GolangStruct
- 程式控制塊PCB結構 task_struct 描述Struct
- rust學習六、簡單的struct結構RustStruct
- Go語言結構體(struct)物件導向程式設計基礎篇Go結構體Struct物件程式設計
- 【Golang】Go 通過結構(struct) 實現介面(interface)GolangStruct
- 結構體中套用其他_結構體結構體
- c語言中的結構(struct)和聯合(union)簡介(轉)C語言Struct
- 俄羅斯方塊的資料結構及實現 struct of a tetris資料結構Struct
- Go 之基礎速學 (六) golang 裡 struct 結構體初始化的幾種方式(一)GolangStruct結構體
- Oracle體系結構:記憶體結構和程式結構(轉)Oracle記憶體
- 結構體結構體
- Oracle體系結構之-記憶體結構Oracle記憶體
- SQL2Struct:一款根據sql語句自動生成golang結構體的chrome外掛SQLStructGolang結構體Chrome
- Go語言結構體(struct)物件導向程式設計進階篇(封裝,繼承和多型)Go結構體Struct物件程式設計封裝繼承多型