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值等问题,
而引用可以作为函数的参数,相对来说更加方便和安全。