Python 结构体

一、结构体声明

struct 结构体名称{

结构体成员1;

结构体成员2;

结构体成员3;

};

eg:

struct Book{

char title[128];

char author[40];

float price;

unsigned int date;

char publisher[40];

};

二、定义结构体类型变量

struct 结构体名称 结构体变量名

eg:struct Book book;

还可以在声明的时候直接定义

struct Book{

char title[128];

char author[40];

float price;

unsigned int date;

char publisher[40];

} book;//注意这里有一个分号

三、访问结构体变量

要访问结构体成员,我们需要引入一个新的运算符号 点号 . 运算符。比如 book.title 就是引用 book 结构体的 title 成员,它是一个字符数组;而 book.price 则是引用 book 结构体的 price 成员,它是一个浮点型的变量。

struct Book{

char title[128];

char author[40];

float price;

unsigned int date;

char publisher[40];

} book;//注意这里有一个分号

int main(){

//struct Book book;这里是定义结构体类型变量的另一种方式

printf("请输入书名:");

scanf("%s",book.title);

printf("请输入作者:");

scanf("%s",book.author);

printf("请输入售价:");

scanf("%f",&book.price);

printf("请输入出版日期:");

scanf("%d",&book.date);

printf("请输入出版社:");

scanf("%s",book.publisher);

printf("数据录入完毕!\n");

printf("书名:%s\n",book.title);

printf("作者:%s\n",book.author);

printf("售价:%.2f\n",book.price);

printf("出版日期:%d\n",book.date);

printf("出版社:%s\n",book.publisher);

return 0;

}

四、初始化结构体变量

初始化一个变量和数组:

int a = 520;

int arr[5] = {1,2,3,4,5}

初始化一个结构体变量:

struct Book book = {

"《带你学C带你飞》",

"小甲鱼",

48.8,

20171111,

"清华大学出版社"

};

五、初始结构体的指定原值

其语法和数组制定初始化元素类似,不过结构体指定初始化成员使用点号(.)运算符和成员名

比如我们可以让程序只初始化Book的price成员:

struct Book book = {.price = 48.8};

还可以不按结构体声明的成员顺序进行初始化:

struct Book book = {

.publisher = "清华大学出版社",

.price = 48.8,

.date = 20171111

}

六、算一算

int main(){

struct A{

char a;

int b;

char c;

} a = {'x',520,'0'};

printf("size of a = %d\n",sizeof(a));//size of a = 12

return 0;

}

//不应该是1+4+1=6吗?怎么会是12

//这是编译器对结构体的成员进行内存对齐后的结果。

//说白了,内存对齐就是让CPU可以更快的读取和处理数据的方式。

Python 结构体

int main(){

struct A{

char a;

char c;

int b;

} a = {'x','0',520};

printf("size of a = %d\n",sizeof(a));//size of a = 8

return 0;

}

Python 结构体

七、结构体嵌套

struct Date{

int year;

int month;

int day;

};

struct Book{

char title[128];

char author[40];

float price;

struct Date date;//一个结构体作为另外一个结构体的成员

char publisher[40];

} book1 = {

"《带你学C带你飞》",

"小甲鱼",

48.8,

{2017,11,11},

"清华大学出版社"

};

int main(){

printf("书名:%s\n",book1.title);

printf("作者:%s\n",book1.author);

printf("售价:%.2f\n",book1.price);

printf("出版日期:%d-%d-%d\n",book1.date.year,book1.date.month,book1.date.day);

printf("出版社:%s\n",book1.publisher);

return 0;

}

八、结构体数组

第一种方法是在申明结构体的时候进行定义

 struct 结构体名称{

结构体成员;

} 数组名[长度];

第二种方法是先申明一个结构体类型(比如上面Book),在用此类型定义一个结构体数组

struct 结构体名称{

结构体成员;

};

struct 结构体名称 数组名[长度];

初始化结构体数组:

struct Book{

char title[128];

char author[40];

float price;

unsigned int date;

char publisher[40];

};

struct Book book[3] = {

{"《零基础入门学习Python》","小甲鱼",49.5,20161111,"清华大学出版社"},

{"《零基础入门学习Scratch》","不二如是",49.9,2017101,"清华大学出版社"},

{"《带你学C带你飞》","小甲鱼",49.5,20171111,"清华大学出版社"}

}

九、结构体指针

指向结构体变量的指针叫做结构体指针。

 struct Book *pt;

pt = &book;

通过结构体指针访问结构体成员又两种方法:

第一种:(*结构体指针).成员名

第二种:结构体指针->成员名

十、传递结构体变量

int main(){

struct Test{

int x;

int y;

} t1,t2;

t1.x = 3;

t1.y = 4;

t2 = t1;//两个结构体变量之间是可以相互赋值的,但是结构体类型必须一样

printf("t2.x=%d,t2.y=%d",t2.x,t2.y);

return 0;

}

struct Date{

int year;

int month;

int day;

};

struct Book{

char title[128];

char author[40];

float price;

struct Date date;

char publisher[40];

};

struct Book getInput(struct Book book){

printf("请输入书名:");

scanf("%s",book.title);

printf("请输入作者:");

scanf("%s",book.author);

printf("请输入售价:");

scanf("%f",&book.price);

printf("请输入出版日期:");

scanf("%d-%d-%d",&book.date.year,&book.date.month,&book.date.day);

printf("请输入出版社:");

scanf("%s",book.publisher);

return book;

}

void printBook(struct Book book){

printf("书名:%s\n",book.title);

printf("作者:%s\n",book.author);

printf("售价:%.2f\n",book.price);

printf("出版日期:%d-%d-%d\n",book.date.year,book.date.month,book.date.day);

printf("出版社:%s\n",book.publisher);

}

int main(){

struct Book b1,b2;

printf("请输入第一本书的信息...\n");

b1 = getInput(b1);

printf("请输入第二本书的信息...\n");

b2 = getInput(b2);

printf("录入完毕,现在开始打印验证...\n\n");

printf("打印第一本书的信息...\n");

printBook(b1);

printf("\n\n");

printf("打印第二本书的信息...\n");

printBook(b2);

return 0;

}

十一、传递指向结构体变量的指针

struct Date{

int year;

int month;

int day;

};

struct Book{

char title[128];

char author[40];

float price;

struct Date date;

char publisher[40];

};

void getInput(struct Book *book){

printf("请输入书名:");

scanf("%s",book->title);

printf("请输入作者:");

scanf("%s",book->author);

printf("请输入售价:");

scanf("%f",&book->price);

printf("请输入出版日期:");

scanf("%d-%d-%d",&book->date.year,&book->date.month,&book->date.day);

printf("请输入出版社:");

scanf("%s",book->publisher);

}

void printBook(struct Book *book){

printf("书名:%s\n",book->title);

printf("作者:%s\n",book->author);

printf("售价:%.2f\n",book->price);

printf("出版日期:%d-%d-%d\n",book->date.year,book->date.month,book->date.day);

printf("出版社:%s\n",book->publisher);

}

int main(){

struct Book b1,b2;

printf("请输入第一本书的信息...\n");

getInput(&b1);

printf("请输入第二本书的信息...\n");

getInput(&b2);

printf("录入完毕,现在开始打印验证...\n\n");

printf("打印第一本书的信息...\n");

printBook(&b1);

printf("\n\n");

printf("打印第二本书的信息...\n");

printBook(&b2);

return 0;

}

十二、动态申请结构体

使用 malloc 函数为结构体分配存储空间。

以上是 Python 结构体 的全部内容, 来源链接: utcz.com/p/233405.html

回到顶部