当前位置:首页 > 教育培训 >

c语言是面向对象的编程语言吗(不支持面向对象的编程语言)

来源:原点资讯(www.yd166.com)时间:2023-06-19 12:07:49作者:YD166手机阅读>>

8、引用

说到引用,我们第一反应就是想到了他的兄弟:指针。

引用从底层来说和指针就是同一个东西,但是在编译器中它的特性和指针完全不同。

c语言是面向对象的编程语言吗,不支持面向对象的编程语言(13)

首先定义一个变量a = 10,然后我们分别定义一个引用b以及一个指针p指向a。我们来转到反汇编看看底层的实现:

c语言是面向对象的编程语言吗,不支持面向对象的编程语言(14)

可以看到底层实现完全一致,取a的地址放入eax寄存器,再将eax中的值存入引用b/指针p的内存中。至此我们可以说(在底层)引用本质就是一个指针。

了解了底层实现,我们回到编译器。我们看到对a的值的修改,指针p的做法是*p = 20;即进行解引用后替换值。

再来看看引用修改:

我们看到修改a的值的方法也是一样的,也是解引用。只是我们在调用的时候有所不同:调用p时需要*p解引用,b则直接使用就可以。由此我们 推断出:引用在直接使用时是指针解引用。p直接使用则是它自己的地址。

这样我们也了解了,我们给引用开辟的这块内存是根本访问不到的。如果直接用就直接解引用了。即使打印&b,输出的也是a的地址。

c语言是面向对象的编程语言吗,不支持面向对象的编程语言(15)

在此附上将指针转为引用的小技巧:int *p = &a,我们将 引用符号移到左边 将 *替换即可:int &p = a。

接下来看看如何创建数组的引用:

intarray[10] = {0}; //定义一个数组

我们知道,array拿出来使用的话就是数组array的首元素地址。即是int *类型。

那么&array是什么意思呢?int **类型,用来指向array[0]地址的一个地址吗?不要想当然了,&array是整个数组类型。

那么要定义一个数组引用,按照上面的小诀窍,先来写写数组指针吧:

int(*q) [10] = &array;

将右侧的&对左边的*进行覆盖:

int(&q)[10] = array;

测试sizeof(q) = 10。我们成功创建了数组引用。

经过上面的详解,我们知道了引用其实就是取地址。那么我们都知道一个立即数是没有地址的,即

int&b = 10;

这样的代码是无法通过编译的。那如果你就是非要引用一个立即数,其实也不是没有办法:

constint &b = 10;

即将这个立即数用const修饰一下,就可以了。为什么呢?

这时因为被const修饰的都会产生一个临时量来保存这个数据,自然就有地址可取了。

c语言是面向对象的编程语言吗,不支持面向对象的编程语言(16)

栏目热文

c语言为何不是面向对象语言(c语言面向过程还是面向对象)

c语言为何不是面向对象语言(c语言面向过程还是面向对象)

01. 前言面向对象编程(OOP)并不是一种特定的语言或者工具,它只是一种设计方法、设计思想。它表现出来的三个最基本的特...

2023-06-19 12:07:48查看全文 >>

c语言是面向对象的程序设计语言(c语言不是面向对象程序设计语言)

c语言是面向对象的程序设计语言(c语言不是面向对象程序设计语言)

C语言是一种“古老”且应用至今的高级编程语言,它是多种流行编程语言的根源。C 进一步扩充和完善了C语言,是一种面向对象...

2023-06-19 12:04:30查看全文 >>

c语言是一种高级程序设计语言吗

c语言是一种高级程序设计语言吗

c语言具体是什么?普及下什么是C语言,C语言到底有什么用?先了解了之后我们在谈它的难度问题。C语言是一种计算机程序设计语...

2023-06-19 12:03:44查看全文 >>

c语言是面向对象的语言对吗(c语言是面向对象的设计语言对吗)

c语言是面向对象的语言对吗(c语言是面向对象的设计语言对吗)

1、c语言是面向过程还是面向对象的语言?C语言是一门面向过程的语言。所谓面向过程就是以事件作为我们编程的中心。比如说我要...

2023-06-19 12:04:41查看全文 >>

c是一种面向对象的程序设计语言(面向对象程序设计期末考试题及答案)

c是一种面向对象的程序设计语言(面向对象程序设计期末考试题及答案)

目录01.为什么会选择学习c 02. C与C 的历史03. C 的特点04. c 的缺点05. c 的具体应用...

2023-06-19 12:11:30查看全文 >>

c语言是面向对象的设计语言对吗(c语言是面向对象还是过程的语言吗)

c语言是面向对象的设计语言对吗(c语言是面向对象还是过程的语言吗)

面向对象的三个特征:封装,继承,多态。但是C语言不是面向对象编程语言,所以需要借助一些技巧来实现这三个特征:(1)C语言...

2023-06-19 11:54:12查看全文 >>

c语言支持面向对象的程序设计方法(c语言是面向对象的编程语言)

c语言支持面向对象的程序设计方法(c语言是面向对象的编程语言)

面向对象设计有诸多优势:可读性强,扩展性强,复用性强。面向对象语言有3大核心技术:1、封装性2、继承性3、多态性主流面向...

2023-06-19 12:22:14查看全文 >>

c语言是模块化程序设计语言吗(c语言模块化设计定义)

c语言是模块化程序设计语言吗(c语言模块化设计定义)

《C程序设计》知识点第1章 C语言概述1.1. C语言属高级语言,区分字母的大小写,以函数为基本单位采用模块化程序设计,...

2023-06-19 11:48:40查看全文 >>

韩剧秘密森林结局是什么(韩剧秘密森林在哪里可以看到)

韩剧秘密森林结局是什么(韩剧秘密森林在哪里可以看到)

在现实生活中,确实有一些婚外情人最终找到了自己的幸福,有些甚至能够走到一起结婚,以下是一些婚外情人美好结局的例子。《红楼...

2023-06-19 12:02:13查看全文 >>

韩剧秘密森林吓人吗

韩剧秘密森林吓人吗

随着一轮又一轮不断重复发生的疫情,我们似乎已经忘了戴上口罩之前的生活是怎么样的,也很难想象疫情到底什么时候会彻底结束。而...

2023-06-19 12:10:39查看全文 >>

文档排行