C-C++语言结构体中定义另一个结构体指针的经验
来源:互联网 发布:淘宝男士机械手表 编辑:程序博客网 时间:2024/06/05 07:45
本文进行讨论的是,在Linux中,C/C++语言的结构体的使用情况。一般情况下,结构体的使用还是相对比较简单的,它携带的一类物体的某一些属性,
比如
这个结构一携带的就是一个人的两个基本信息,年龄(age)和身高(height),同样你也可以继续添加人的相关信息进去,比如学号,班级等。
但是今天讨论的是在结构体中定义一个结构体指针的问题,当然这也可以延伸到结构体定义一个普通类型的指针方面,读者可以自行进行验证或者思考,本文
不作讨论。
上述的两个结构体表示的含义是:
第一个: 学生的个人信息
第二个:学校的情况(包含了学生的信息和学校的排名)
接下来,如果要对Statuend_T的结构体的变量进行设置,那么有两种方法,第一个直接使用Student_T定义的变量进行赋值,第二个就是使用School_T进行间接赋值,
今天就是讨论第二种的方法。
首先,在一个程序运行过程中,实际上是内存指针在操作,因此我们定义School_T的指针*school,具体的操作如下程序
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>typedef struct tagStudent_T{ int i_StuID; int i_StuClass;}Student_T;typedef struct tagSchool_T{ Student_T *student; int i_SchoolRank;}School_T;int main(int argc,char const *argv[]){ School_T *school = (School_T *)malloc(sizeof(School_T)); if(NULL != school) { school->i_SchoolRank = 1; //rank first /*由于School_T中定义的student是一个结构体指针,必须要对其进行分配内存*/ school->student = (Student_T *)malloc(sizeof(Student_T)); if(NULL != school->student) { school->student->i_StuID = 12345; school->student->i_StuClass = 5; } else { free(school); } } /*这两个的free顺序最好不要调转,因为如果先free掉school的话,相当于将student得本体free了,相当于一个野指针 */ free(school->student); free(school);}
如果你不想使用这种方式,大可直接使用变量,不是指针类的变量,如School_T school。同样School_T结构体重使用的也是一个普通的变量,即Student_T student,这样,
你就不需要进行内存指针的操作。但是本人建议还是使用指针来进行,效率相对而言会更快一点。可以参考一些<C和指针>这本书
(注:上述的编译只在Ubuntu下的linux系统操作,其他的win,vs等没有进行测试)
阅读全文
0 0
- C-C++语言结构体中定义另一个结构体指针的经验
- C-C++语言结构体中定义另一个结构体指针的经验
- C-C++语言结构体中定义另一个结构体指针的经验
- C-C++语言结构体中定义另一个结构体指针的经验
- C-C++语言结构体中定义另一个结构体指针的经验
- C语言中结构体指针的定义和引用
- C语言中结构体指针的定义和引用
- C语言中结构体指针的定义和引用
- C语言中结构体指针的定义和引用
- C语言中结构体指针的定义和引用
- C语言中结构体指针的定义和引用
- C语言中结构体指针的定义和引用
- C语言中结构体指针的定义和引用
- C语言中结构体指针的定义和引用
- C语言中结构体指针的定义和引用
- C语言结构体中定义函数指针详解
- C语言结构体中定义函数指针
- C语言结构体中定义函数指针详解
- c/c++中const的用法
- LeetCode 71. Simplify Path
- 一个整型数组里除了两个数字之外,其他的数字都出现了两次
- STL vector学习笔记
- Android Studio下 NDK配置与Jni开发流程
- C-C++语言结构体中定义另一个结构体指针的经验
- codeforces 559C Gerald and Giant Chess
- PHP 面向对象
- 输一个递增排序的数组和一个数字 s,在数组中查找两个数使得它们的 和正好是 s
- Bootstrap:表单和图片
- 28303 篇 arXiv 论文看深度学习 6 大趋势
- 虚拟机的linux和Windows建立共享文件
- 动态加载类并实例化对象
- C表白程序