深入理解c语言指针-第六章
来源:互联网 发布:牡丹江管理局电视网络 编辑:程序博客网 时间:2024/06/07 08:16
////指针和结构体 /////结构体也可以通过malloc创建空间??????????为何要与typedef联系在一起 /* 结构和数组的不同: 数组是由相同类型的数据组成的,所以它的每一项的长度都是相同的,所有它可以通过下标来访问数组的各项 但结构并不是由他成员构成的数组,它的每一项成员的数据成都可能都不同,所以无法通过下标来访问 而结构变量在表达式时,也不会转换为一个指针 */ ////结构体的申明 /////结构体申明的模板 struct tag{member-list} variable-list; struct{ int a; char b; float c; } x; //上面声明了一个结构体,并申明了一个x的变量 ,它包含三项a,b,c x.a = 10; printf("%d\n",x.a); struct{ int a; char b; float c; }y[20],*z; ////上面申明了y和z,y是一个数组,它包含20个结构体,z指向了这个类型的结构体 /////上面是直接申明结构体和指向结构体的变量 /////需要重点注意的是虽然上面两个结构体内部申明都是a,b,c类型也完全相同,但是在编译器看来是两种截然不同的类型 ////所以 z = &x是非法的 ////由上面结构体申明的模板可以知道,还有一个tag ////tag的作用就是讲一个变量和结构体列表联系在一起 struct typeStruct{ int a; char b; float c; }; struct typeStruct t1; struct typeStruct *t2; ////此时t1,t2是相同类型的结构体 t1.a = 100; t1.b = 's' ; t1.c = 23.23; printf("%d , %c , %f\n",t1.a,t1.b,t1.c); ////还有一种申明结构体的方式 typedef struct{ int a; char b; float c; }simpleType; /////这里的simpleType是结构体类的名称,并不是结构体的一个变量 ////申明一个结构的方式便变为 simpleType type1; simpleType type2; type1.a = 300; type1.b = 'd'; printf("%d , %c\n",type1.a,type1.b); /////结构体中的成员变量还可以是其他结构体的成员 struct TEST{ int a; simpleType type; }; struct TEST test1; test1.a = 400; test1.type = type1; printf("%d %d %c\n",test1.a,test1.type.a,test1.type.b);// // ////结构体成员的访问// struct TEST *cp; ////由于.操作符高于间接操作符,而*是一个间接操作符 但是好像还是有问题,在dev c++中无法执行 //////所以最好对于指向结构体的指针访问成员变量的时候,还是用->// printf("sssssss-- %d \n",testp->a);// struct Ts{// int a;// float b;// };// struct Ts *t;// (t) -> a = 100;////使用->不知道为什么老是蹦 /////结构体的成员可以是自己本身类型的结构体成员 struct ourselfStruct{ int a; struct ourselfStruct *ourself;////这里必须是指针,否则不合法 }; struct ourselfStruct os1; struct ourselfStruct os2; os1.a = 500; os2.a = 600; os1.ourself = &os2; printf("结构体引用自身%d , %d\n",os1.a,os1.ourself->a);////这里不知道为什么使用->函数又不报错 /////结构体的初始化,结构体的初始化和数组类似,都是用一对{} struct Ty{ int a; char b; }xx={10,'c'}; printf("%d %c\n",xx.a,xx.b); ////结构体使用malloc分配内存 typedef struct mem{ int a; int b; }Mems; Mems *me = (Mems*)malloc(sizeof(Mems)); (*me).a = 700; (*me).b = 800; printf("%d %d\n",(*me).a,(*me).b); /* 在为结构体分配内存时,运行时系统不会自动为结构体内部的指针分 配内存。类似地,当结构体消失时,运行时系统也不会自动释放结构 体内部的指针指向的内存。 */
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/* ============================================================================ Name : De.c Author : caoxuekun Version : Copyright : Your copyright notice Description : Hello World in C, Ansi-style ============================================================================ */#include <stdio.h>#include <stdlib.h>#define LIST_SIZE 10typedef struct{ int a; char *p;}Person;////释放掉结构体中的内部指针void deallocatePerson(Person *person){ free(person->p);}Person *list[LIST_SIZE];/////初始化结构体数组,将其都置为NULLvoid initializeList(){ int i = 0; for(;i<LIST_SIZE;i++){ list[i] = NULL; }}////获取结构体Person* getPerson(){ int i = 0; ////遍历结构体数组,找到为NULL的项,返回对应的指针,否则创建一个结构体 for(;i<LIST_SIZE;i++){ if(list[i] !=NULL){ Person *ptr = list[i]; list[i] = NULL; return ptr; } } Person *person = (Person*)malloc(sizeof(Person)); return person;}////将某一个Person结构体放入数组当中Person* returnPerson(Person *person){ int i = 0; for(;i<LIST_SIZE;i++){ if(list[i] == NULL){ list[i] = person; return person; } } ////数组满了,利用deallocateperson释放掉person结构体中的内部指针 deallocatePerson(person); ////并释放掉person free(person); return NULL;}/////为结构体的每一项赋值void initializePerson(Person *ptr,int a,char *p){ ptr->a = a; ptr->p = p;}///展示结构体Person的每一项数据int main(void){ ////初始化 initializeList(); Person *ptrPerson; ptrPerson = getPerson(); ////初始化ptrPerson initializePerson(ptrPerson,100,"aaaa"); printf("%d , %s\n",ptrPerson->a,ptrPerson->p); return EXIT_SUCCESS;}
阅读全文
0 0
- 深入理解c语言指针-第六章
- 深入理解c语言指针-第二章
- 深入理解c语言指针-第三章
- 深入理解c语言指针-第四章
- 深入理解c语言指针-第五章
- 深入理解 C 指针阅读笔记 -- 第六章
- 深入理解C语言指针
- 深入理解C语言指针
- 深入理解C语言指针
- 深入理解C语言指针
- 深入理解C语言指针
- C语言指针深入理解
- 深入理解C语言指针
- <深入理解C指针>学习笔记和总结 第六章 指针和结构体
- <深入理解C指针>学习笔记和总结 第六章 指针和结构体 第二部分
- 读《深入理解C语言指针》第三章
- 深入理解C语言指针的奥秘- -- -
- 深入理解C语言指针的奥秘
- 第一个用tikz画的图
- jvisualvm安装插件
- Unity3D 大型游戏 MOBA类手机游戏 状态机在游戏中的应用(18)
- Android端关于HTTPS的认证---->可用
- Struts2结合Bootstrap-Table分页的使用
- 深入理解c语言指针-第六章
- docker项目开发部署
- 二进制转十进制快速方法
- android 抓取crash信息流程简介
- 对一个人身高体重进行排序(结构体)
- 目录---FlappyBird游戏开发教程
- 南京邮电大学单片机实验一:使用集成开发环境Keil进行程序开发
- 《程序员的成长课》新书日销量排名第4
- 勾股定理