指针和引用是相似的概念,但并不是相同的。它们都是指向一个对象,但是指针可以允许这个指向随时变化,并且它允许你指向一个空对象。引用可不一样,引用在初始时就必须指向一个对象,并且这个指向永远不能变化,也就是说永远只能指向这个对象,不能改变。可以这么理解,指针是一个变量的指向,引用是一个常量的指向。
指针和引用在操作上也有区别,指针使用操作符* 和-> ,引用使用操作符& 和. (点)。
比如,在定义时他们使用不同的操作符:
定义指针: int *number ; // 可以不初始赋值
定义引用: string s = “hangcool” ;
string& ps = s ; // 必须初始赋值,这样ps 就指向了s 。
在指向一个变量的成员时使用不同的操作符:
指针指向:x->y ; // 指向x 指针的成员y ;
引用指向:x.y ; // 指向x 引用的成员y ;
当然我们也可以这样写:(*x).y 等价于 x->y 。
在指针的概念里必须清楚,x 代表指向某个地址的地址值,*x 代表指向某个地址的变量值。
另外,除了在定义指针和引用的地方用到* 和& ,它们还有一个重要的用途:
在变量前使用* 和& 它们有不同的含义:
* : 称作 引用操作符 。 它表示要取的是表达式所表示的地址指向的内容。它可以被翻译为“… 指向的数值” ("value pointed by") 。
比如,* mypointer 可以被读作“mypointer 指向的数值”。
& : 称作 地址或反引用操作符 。它被用作一个变量前缀,可以被翻译为“… 的地址”("address of") ,
比如,&variable1 可以被读作 variable1 的地址。
分享到:
相关推荐
使用解引用操作符`*`,我们可以访问或修改指针所指向的对象。 - **引用**:引用不能进行算术运算,也没有解引用操作符,因为引用总是直接指向它所绑定的对象。但是,我们可以像操作普通变量一样操作引用。 4. **...
在C语言中,**p与*&p是两个常见的指针操作表达式,它们分别涉及到指向指针的指针和引用指针变量的概念。理解这两者的区别,有助于更准确地掌握指针的操作和内存管理。 首先,我们需要明确**p的含义。当声明一个指针...
通过解引用操作符`*`,我们可以访问该地址存储的数据。指针可以被初始化为`NULL`,也可以指向任何类型的变量或对象的地址。 - **引用**则是对已有变量或对象的别名,它不是独立存储在内存中的实体。一旦定义了一个...
指针和引用是C++语言中的两种非常重要的概念,它们都是用来间接访问内存中的对象,但有着本质的区别。 首先,指针是一个变量,它存储的是另一个变量的地址。这意味着指针可以被重新赋值,指向不同的对象。例如,你...
3. 可以动态分配和释放内存,使用`new`和`delete`操作符。 然而,指针也有一些潜在的问题,如空指针异常、未初始化的指针以及内存泄漏等,这些都需要程序员额外小心。 相对而言,引用是C++引入的一个安全特性,它...
我们可以声明一个指针,并使用解引用操作符(*)来访问它所指向的值。指针可以被赋值为NULL,表示它不指向任何有效内存位置。此外,指针可以被重新赋值,指向不同的对象,这种特性使得指针在动态数据结构如链表、树...
5. **`sizeof`操作符**: - `sizeof`引用会得到其所引用的对象的大小。 - `sizeof`指针会得到指针本身的大小,即一个地址的大小。 6. **自增运算**: - 指针的自增运算会使其指向下一个数据元素的地址。 - 引用...
4. 操作符:指针可以通过`*`和`->`进行解引用操作,而引用直接使用其名称就是解引用。 5. 空间占用:指针本身占用内存,引用只是已存在变量的别名,不占用额外空间。 联系方面,两者都可以用来间接访问和修改对象,...
内存中的引用和指针是C++编程语言中的两种重要概念,它们都用于间接访问和操作对象,但在使用和性质上存在显著差异。 首先,指针是一个变量,它存储了一个对象的内存地址。声明指针时,我们可以使用*操作符,如`...
这种方法使得操作符的左操作数成为隐含的`this`指针,即操作符作用于当前对象。例如: ```cpp class Vector { public: Vector operator+(const Vector& other) const { // 实现向量相加逻辑 } }; ``` 2. 友元...
引用在函数参数传递、返回值以及操作符重载中非常有用,因为它提供了安全的、类似于按值传递对象的方式,而无需复制整个对象。此外,引用使得代码更易读,因为它们看起来就像常规变量一样,但又保持了对原始对象的...
对象指针和对象引用作函数的参数 1. 对象指针作函数的参数 使用对象指针作为函数参数要经使用对象作函数参数更普遍一些。因为使用对象指针作函数参数有如下两点好处: (1) 实现传址调用。可在被调用函数中改变...
通过使用解引用操作符 `*`,我们可以访问结构体变量 `a` 的成员。 结构体变量的内存布局 在计算机内存中,结构体变量 `a` 占据了一个连续的内存空间。在上面的代码中,我们定义了一个结构体 `Abc`,它包含三个 `...
"指针引用和动态空间管理" 指针是计算机编程中的一种重要概念,它用于存储特定类型数据的地址。指针的类型就是指针所指向的数据类型。指针可以分为两种特殊的指针:void指针(无类型指针)和空指针(NULL)。 指针...
我们可以通过解引用操作符`*`来访问或修改指针所指向的值。指针还可以被赋值为其他指针的地址,或者被赋予NULL表示不指向任何对象。指针的使用需要注意空指针异常、野指针和内存泄漏等问题。 "指针常量和常量指针...
标签“类应用 操作符重载”表明文档将围绕类的应用和操作符重载的知识点展开。 在提供的部分内容中,详细介绍了C++语言中单链表的设计和实现,这是类应用的一个例子。文中展示了如何使用复合方式和嵌套方式定义链表...
在C语言中,数组名和指针之间存在微妙且重要的区别,这往往让初学者感到困惑。虽然在某些上下文中,它们看似可以互换使用,但深入理解它们的本质差异对于编写高效、安全的代码至关重要。 ### 一、数组名与指针的...
声明类成员函数指针时,我们需要指定函数的返回类型、类域操作符(即`.`或`->`,取决于是否是成员指针)以及函数参数列表。对于静态成员函数,由于它们不与类的实例相关联,因此没有`this`指针,静态成员函数指针...
- **构造函数**: 初始化指针,使用`new`操作符分配内存。 - **析构函数**: 使用`delete[]`释放内存。 - **成员函数**: 调用指针所指向的数据。 #### 指向对象的指针 指向类的对象的指针可以在类外部操纵类内部的...