循环引用的讨论

2024-08-21 07:08
文章标签 引用 循环 讨论

本文主要是介绍循环引用的讨论,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

                                                                                                                        循环引用的讨论

c语言中我们有时候有时需要两个结构体相互引用,一方面是来方便相互访问对方的数据,实现互相数据关联,另一方面也可以比较明显的反映两者之间的关系。举一个例子吧:

例如:班级和学生的关系,班级有学生组成,每个学生都有一个班级,这样两者之间是有数据交互的,使用引用的话,可以由指向班级的学生指针很方便的知道班级的所有信息,不用去很麻烦的有班级的一个数据信息去确定班级。

程序1:不利用互相引用,来知道班级的信息

typedef struct _student//定义一个学生的结构体,存储学生数据

{

  int studentnum;//学号

  char name[20];//姓名

  int student_in_class;//学生所在班级的班级号

}student;

typedef struct _grade//

{

  int gradenum;//班级号

  student stuArray[30];//定义班级标准30个学生

}grade;

利用一个学生变量st来寻找其所在的对应班级变量的信息,需要用st. student_in_class来遍历存放班级的数据来找到班级变量grade,然后才有grade遍历grade.gradenumgrade.stuArray,如果存放班级的数据结构遍历比较麻烦的话,则会在一定程度上浪费时间。

程序2:利用引用来知道班级的信息

struct _grade;

typedef struct _student//定义一个学生的结构体,存储学生数据

{

  int studentnum;//学号

  char name[20];//姓名

  struct _grade * student_in_class;//学生所在班级的班级号

}student;

typedef struct _grade//

{

  int gradenum;//班级号

  student stuArray[30];//定义班级标准30个学生

}grade;

如果利用一个学生变量st来寻找其所在的对应班级变量的信息,只需要一步操作st.student_in_class->gradenumst.student_in_class->stuArray一步操作来做,同时又明显的反映了学生中也有班级的实际之间的关系。

   不过要注意,引用引用的实际是变量的地址不要求详细的变量有详细的内部数据构成,在对变量的实际数据信息没有详细要求的操作中使用着比较方便,也可以说引用存放的是访问变量信息的路径。注意,c语言中,引用只使用于指针,即两个变量之间的引用只能是地址的引用,而不能是互相之间变量的引用。简单的说,引用引用的是地址,例如当你把学生信息中的指针改变为不是指针类型时,改变为struct _grade 型时,会出现错误,出现struct _grade没有详细数据组成的信息。在面向对象的语言中几乎都包括互相引用,例如c++语言和Java语言中,也是先声明一个没有具体内部的类来提醒通过编译,下面是再互相引用,objective-c中通过@class前项引用的方式来提醒通过编译,等等,可以说引用也是面向对象编程的一大特色,一方面符合实际逻辑,另一方面也简化了数据访问操作,不过所有引用的根本都是通过存储变量的地址来实现引用的

这篇关于循环引用的讨论的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1092468

相关文章

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

poj3750约瑟夫环,循环队列

Description 有N个小孩围成一圈,给他们从1开始依次编号,现指定从第W个开始报数,报到第S个时,该小孩出列,然后从下一个小孩开始报数,仍是报到S个出列,如此重复下去,直到所有的小孩都出列(总人数不足S个时将循环报数),求小孩出列的顺序。 Input 第一行输入小孩的人数N(N<=64) 接下来每行输入一个小孩的名字(人名不超过15个字符) 最后一行输入W,S (W < N),用

JavaSE(十三)——函数式编程(Lambda表达式、方法引用、Stream流)

函数式编程 函数式编程 是 Java 8 引入的一个重要特性,它允许开发者以函数作为一等公民(first-class citizens)的方式编程,即函数可以作为参数传递给其他函数,也可以作为返回值。 这极大地提高了代码的可读性、可维护性和复用性。函数式编程的核心概念包括高阶函数、Lambda 表达式、函数式接口、流(Streams)和 Optional 类等。 函数式编程的核心是Lambda

校验码:奇偶校验,CRC循环冗余校验,海明校验码

文章目录 奇偶校验码CRC循环冗余校验码海明校验码 奇偶校验码 码距:任何一种编码都由许多码字构成,任意两个码字之间最少变化的二进制位数就称为数据检验码的码距。 奇偶校验码的编码方法是:由若干位有效信息(如一个字节),再加上一个二进制位(校验位)组成校验码。 奇校验:整个校验码中1的个数为奇数 偶校验:整个校验码中1的个数为偶数 奇偶校验,可检测1位(奇数位)的错误,不可纠错。

17 通过ref代替DOM用来获取元素和组件的引用

重点 ref :官网给出的解释是: ref: 用于注册对元素或子组件的引用。引用将在父组件的$refs 对象下注册。如果在普通DOM元素上使用,则引用将是该元素;如果在子组件上使用,则引用将是组件实例: <!-- vm.$refs.p will be the DOM node --><p ref="p">hello</p><!-- vm.$refs.child will be the c

react笔记 8-17 属性绑定 class绑定 引入图片 循环遍历

1、绑定属性 constructor(){super()this.state={name:"张三",title:'我是一个title'}}render() {return (<div><div>aaaaaaa{this.state.name}<div title={this.state.title}>我是一个title</div></div></div>)} 绑定属性直接使用花括号{}   注

Spring是如何解决循环依赖?

现象解释: 在Spring框架中,循环依赖(Circular Dependency)是指两个或多个Bean之间相互依赖,形成了一个循环。例如,Bean A依赖于Bean B,而Bean B又依赖于Bean A。Spring通过多种机制解决循环依赖问题,具体来说,主要有以下几种方式: 1.三级缓存机制 Spring容器在实例化Bean时使用了三级缓存来解决循环依赖,主要涉及三个缓存结构: 一级

FPGA开发:条件语句 × 循环语句

条件语句 if_else语句 if_else语句,用来判断是否满足所给定的条件,根据判断的结果(真或假)决定执行给出的两种操作之一。 if(表达式)语句; 例如: if(a>b) out1=int1; if(表达式)         语句1; else         语句2; 例如: if(a>b)out1=int1;elseout1=int2; if(表达式1) 语句1; els

shell循环sleep while例子 条件判断

i=1# 小于5等于时候才执行while [ ${i} -le 5 ]doecho ${i}i=`expr ${i} + 1`# 休眠3秒sleep 3doneecho done 参考 http://c.biancheng.net/cpp/view/2736.html

【JAVA入门】Day35 - 方法引用

【JAVA入门】Day35 - 方法引用 文章目录 【JAVA入门】Day35 - 方法引用一、方法引用的分类1.引用静态方法2.引用成员方法2.1 引用其他类的成员方法2.2 引用本类和父类的成员方法2.3 引用构造方法2.4 使用类名引用成员方法2.5 引用数组的构造方法 二、方法引用的例题         方法引用就是“把已经有的方法当作函数式接口中抽象方法的方法