【C】 结构体与结构体指针,->在C语言中的唯一用途
2017-10-01 14:49
239 查看
/* 结构体 */ #include <stdio.h> #include <malloc.h> #define STRLEN 128 struct Student { char *name; // 指针变量,指向字符,机器32位大小为32bit/8bit = 4Bytes int age; // 整形变量,4字节 float score; // 单精度浮点型,4字节 }; int main(){ int i = 0; struct Student stu; for (i = 0; i < 5; i++) { printf("输入学生姓名:"); stu.name = (char *)malloc(sizeof(char)*STRLEN); /* 很奇怪,上面为什么要分配一块内存空间呢? 如果不分配内存,在运行的时候可能不会发生任何异常,因为恰好指针指向 的内存是该指针有权限(读和写)的。 如果运气不好,指向了一块只读的内存比如常量区或者代码区,将引发致命 的崩溃! 为了解决这个问题,那就在在使用这个指针之前,为其分配内存空间,使之 指向一块有意义的内存。 */ scanf("%s", stu.name); printf("输入学生年龄:"); scanf("%d", &stu.age); printf("输入学生分数:"); scanf("%f", &stu.score); printf("学生%d\t 姓名(占内存%d):%s\t 年龄(占内存%d):%d\t 成绩(占内存%d): %.2f\n", i, sizeof(stu.name), stu.name, sizeof(stu.age), stu.age, sizeof(stu.score), stu.score); free(stu.name); } return 0; } /* 结构体指针 */ #include <stdio.h> #include <malloc.h> #define STRLEN 128 struct Student { char *name; // 指针变量,指向字符,由于我的编译环境是win32,所以一个指针变量的长度为32bit/8bit = 4Bytes int age; // 整形变量,4字节 float score; // 单精度浮点型,4字节 }stu; int main(){ enum week{Mon=1, Tus=2, Wes=3, Thr=4, Fri=5, Sat=6, Sun=7}; int day; scanf("%d",&day); switch (day) { case Mon: printf("星期一"); break; case Tus: printf("星期二"); break; case Wes: printf("星期三"); break; default: break; } int i = 0; struct Student *p = &stu; for (i = 0; i < 5; i++) { printf("输入学生姓名:"); (*p).name = (char *)malloc(sizeof(char)*STRLEN); /* 很奇怪,上面为什么要分配一块内存空间呢? 如果不分配内存,在运行的时候可能不会发生任何异常,因为恰好指针指向 的内存是该指针有权限(读和写)的。 如果运气不好,指向了一块只读的内存比如常量区或者代码区,将引发致命 的崩溃! 为了解决这个问题,那就在在使用这个指针之前,为其分配内存空间,使之 指向一块有意义的内存。 */ scanf("%s", (*p).name); scanf("%s", p->name); printf("输入学生年龄:"); scanf("%d", &((*p).age)); scanf("%d", &p->age); printf("输入学生分数:"); scanf("%f", &((*p).score)); scanf("%f", &p->score); printf("学生%d\t 姓名(占内存%d):%s\t 年龄(占内存%d):%d\t 成绩(占内存%d): %.2f\n", i, sizeof((*p).name), (*p).name, sizeof((*p).age), (*p).age, sizeof((*p).score), (*p).score); printf("学生%d\t 姓名(占内存%d):%s\t 年龄(占内存%d):%d\t 成绩(占内存%d): %.2f\n", i, sizeof(p->name), p->name, sizeof(p->age), p->age, sizeof(p->score), p->score); free(p->name); } return 0; }
相关文章推荐
- C语言中->、变量、指针、结构体的解释,通俗易懂!
- c语言指针及结构体复习
- 12个C语言面试题,涉及指针、进程、运算、结构体、函数、内存,看看你能做出几个!
- C语言中不同类型的结构体的指针间可以强制转换
- c语言结构体中保存函数指针的用法
- C语言结构体指针的输入输出
- <深入理解C指针>学习笔记和总结 第六章 指针和结构体 第二部分
- 【嵌入式开发】C语言 结构体相关 的 函数 指针 数组
- C语言中精华------>指针
- 程序猿之---C语言细节22(函数返回指针注意事项<悬空指针>、查看进程可以分配的内存大小)
- c语言中结构体指针
- 黑 马 程 序 员_视频学习总结<C语言>----03 指针
- 【C语言】用结构体数组指针完成:有三个学生信息,存放在结构体数组中,要求输出全部信息
- C语言小知识点 汇总5 结构体指针
- C语言指向结构体的指针的例子
- 【C语言提高38】结构体套一级指针
- C语言结构体里的成员数组和指针
- C语言:存取结构体成员的点运算符(.)和箭头运算符(->)的区别(转)
- C语言--结构体中的指针
- C语言指针学习笔记:指向结构体的指针