指针( c ) vs 引用( c++ )

本文介绍了C语言中的指针特性,包括内存地址、指针运算和NULL指针等,并探讨了C++中的引用,作为变量的别名,不占额外内存,且必须在定义时初始化。同时,指出了指针和引用在定义、内存管理、NULL值处理、类型匹配和函数参数传递等方面的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.c语言中指针的特点

1️⃣内存地址

指针变量存储的是一个内存地址,可以用来访问该地址上存储的数据。

2️⃣ 占用内存

指针变量本身占用内存,其大小与系统的位数有关,通常为4字节或8字节。

3️⃣操作符

指针变量可以通过一些操作符来操作,如取地址符"&"、解引用符"*"、加法运算符"+"等。

4️⃣NULL指针

指针可以被初始化为NULL,表示该指针不指向任何有效的内存地址。

5️⃣ 野指针

如果一个指针没有被初始化,或者指向一个已经释放的内存地址
那么它就成为了野指针,使用野指针会导致程序崩溃或者产生未知的错误。

6️⃣ 指针运算

指针变量可以进行加法、减法等运算,这些运算会改变指针所指向的地址。

7️⃣数组

C语言中的数组可以看做是一个指针,可以通过指针运算来访问数组中的元素。

2. C++中的引用(Reference)

具有以下几个特点:

1️⃣别名

引用是变量的别名,可以通过该名字来访问原始变量。

2️⃣类型匹配

引用必须与原始变量类型匹配,即引用只能引用与其类型相同的变量。

3️⃣内存管理

引用不像指针需要进行内存的动态分配和释放,
因为引用本身不占用额外的内存空间,只是原始变量的一个别名。
引用本身并不占用额外的内存,但它会在编译时被转化为指针或者是某个对象的别名,从而存在内存中。
具体来说,当我们定义一个引用时,编译器会为这个引用分配一段内存地址,并将这个内存地址和被引用的变量或对象关联起来。

4️⃣作为函数参数

引用& 可以用来传递函数参数,并且可以改变原始变量的值,
相对于传递指针,使用引用更加简洁和安全。

5️⃣可以使用const修饰

引用也可以像变量一样被const修饰,表示引用所绑定的变量是只读的。

6️⃣不能为NULL

引用在定义的时候必须初始化,因为引用必须绑定到一个已有的变量上,不能为NULL。

3.指针 🆚 引用

C语言中的指针和C++中的引用都用于间接访问变量的机制

有以下几个方面的不同:

1️⃣定义方式

指针通过在变量前加 * 号来定义,
引用通过在变量前加 & 符号来定义。

2️⃣内存管理

指针需要进行内存的动态分配和释放,
而引用则不需要,因为引用本身不占用额外的内存空间。

3️⃣NULL值

指针可以被赋值为NULL表示它不指向任何对象,
而引用必须在定义时就初始化,它不能为NULL。

4️⃣类型匹配

指针可以通过强制类型转换改变它所指向的变量类型,
而引用只能绑定到与其类型相同的变量。

5️⃣操作方式

指针可以进行算术运算和指针运算,
而引用则没有这些运算,因为引用本身就是变量的别名。

6️⃣函数传递

指针可以作为函数的参数,但是需要额外判断NULL值等问题,
而引用可以作为函数的参数,相对来说更加方便和安全。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值