C结构体的用法详解
来源:互联网 发布:js文件代码的执行顺序 编辑:程序博客网 时间:2024/05/17 22:07
1.
#include<stdio.h>struct Student//定义结构体{ char name[10]; int age;};int main(){ struct Student stu;//声明结构体变量 scanf("%s%d",stu.name,&stu.age); printf("%s %d\n",stu.name,stu.age); return 0;}
2.
#include<stdio.h>struct Student//定义结构体同时声明结构体变量{ char name[10]; int age;}stu1,stu2;int main(){ scanf("%s%d",stu1.name,&stu1.age); printf("%s %d\n",stu1.name,stu1.age); return 0;}
3.
#include<stdio.h>struct//定义结构体同时声明结构体变量,并省略了结构体类型名,此时不能再以此结构体类型去申明其他变量{ char name[10]; int age;}stu1,stu2;int main(){ scanf("%s%d",stu1.name,&stu1.age); printf("%s %d\n",stu1.name,stu1.age); return 0;}
4.使用typedef的情况
#include<stdio.h>typedef struct Student{ char name[10]; int age;}stu1,stu2;//给struct Student取了两个别名int main(){ stu1 stu; scanf("%s%d",stu.name,&stu.age); printf("%s %d\n",stu.name,stu.age); return 0;}
5.
#include<stdio.h>typedef struct Student{ char name[10]; int age;}stu1,stu2[100];//给struct Student取了两个别名int main(){ stu2 stu;//声明了一个长度为100的结构体数组stu scanf("%s%d",stu[1].name,&stu[1].age); printf("%s %d\n",stu[1].name,stu[1].age); return 0;}
6.解析严蔚敏《数据结构》Page163的代码
typedef struct ArcNode//ArcNode不能省略,因为还要声明struct ArcNode *nextarc;{ int adjvex; struct ArcNode *nextarc;//使用struct ArcNode 声明变量的原因是struct ArcNode 还没取别名 InfoType *info;}ArcNode;typedef struct VNode{ VertexType data; ArcNode *firstarc;}VNode,AdjList[MAX_VERTEX_NUM];typedef struct { AdjList vertex;//vertex是长度为MAX_VERTEX_NUM的结构体数组 int vernum,arcnum; int kind;}ALGraph;
7.关于结构体的自引用
自引用 结构体
1.1 不使用typedef时
错误的方式:
[cpp] view plaincopy
- struct tag_1{
- struct tag_1 A; /* 结构体 */
- int value;
- };
这种声明是错误的,因为这种声明实际上是一个无限循环,成员b是一个结构体,b的内部还会有成员是结构体,依次下去,无线循环。在分配内存的时候,由于无限嵌套,也无法确定这个结构体的长度,所以这种方式是非法的。
正确的方式: (使用指针):
[cpp] view plaincopy
- struct tag_1{
- struct tag_1 *A; /* 指针 */
- int value;
- };
由于指针的长度是确定的(在32位机器上指针长度为4),所以编译器能够确定该结构体的长度。
1.2 使用typedef 时
错误的方式:
[cpp] view plaincopy
- typedef struct {
- int value;
- NODE *link; /* 虽然也使用指针,但这里的问题是:NODE尚未被定义 */
- } NODE;
这里的目的是使用typedef为结构体创建一个别名NODEP。但是这里是错误的,因为类型名的作用域是从语句的结尾开始,而在结构体内部是不能使用的,因为还没定义。
正确的方式:有三种,差别不大,使用哪种都可以。
[cpp] view plaincopy
- /* 方法一 */
- typedef struct tag_1{
- int value;
- struct tag_1 *link;
- } NODE;
- /* 方法二 */
- struct tag_2;
- typedef struct tag_2 NODE;
- struct tag_2{
- int value;
- NODE *link;
- };
- /* 方法三 */
- struct tag_3{
- int value;
- struct tag_3 *link;
- };
- typedef struct tag_3 NODE;
0 0
- C结构体的用法详解
- C语言结构的用法详解
- C/C++ struct 结构体定义 用法详解
- C Primer Plus 结构体 struct 详解 常见用法
- C 结构体的用法总结
- C中结构体struct的用法
- C typedef的用法 结构体指针的用法
- c++/c 结构体定义 typedef struct 用法详解和用法小结
- c语言的结构体详解
- C语言结构的用法
- struct stat结构体的详解和用法
- struct stat结构体的详解和用法
- struct stat结构体的详解和用法 .
- struct stat结构体的详解和用法
- struct stat结构体的详解和用法
- struct stat结构体的详解和用法
- struct stat结构体的详解和用法
- struct stat结构体的详解和用法
- HTTP状态码
- Git的使用
- java并发编程之CountDownLatch
- Bash shell. Metacharacters
- 2015062603 - 你的位置
- C结构体的用法详解
- CodeForces-552E. Vanya and Brackets
- swift 类型转换
- 华为机试—去掉最值剩下的个数
- Certificates, Indentifiers & Profiles
- 利用矩阵的迹巧妙解决矩阵的求导问题
- Google Map for iOS SDK 开发之沿街道渲染轨迹
- poj3414有向图的搜索BFS+路径记录
- 2015062604 - 智者