1.基础指针运用
若有
int a = 0;
int* p= &a;
则可将b视作是int*类型的变量,变量b储存的是变量a的地址,其中&a代表a变量的地址。一种常见的错误使用方式是:
p= a; //这种赋值方式错误
应修改为:
p= &a; //这种赋值方式正确
总结:int *p; 变量名叫p,类型为int *,可存放一个int数据的地址,此外,有
*p=0
2.关于->
在 C++ 中,->
是成员访问运算符,用于通过指针访问对象的成员。
假设有以下示例代码:
class MyClass {
public:
int myMember;
};
MyClass* ptr = new MyClass(); // 创建 MyClass 对象的指针
//MyClass* ptr = & MyClass();
//如果你想使用对象的指针而不是动态分配的内存块,可以将 new 运算符替换为 & 运算符来获取对象的地址
ptr->myMember = 42; // 使用 -> 访问 myMember 成员并赋值
在上述代码中,我们定义了一个名为 MyClass
的类,其中包含一个整数类型的成员变量 myMember
。然后,我们创建了一个 MyClass
对象的指针 ptr
,使用 new
运算符动态分配内存。
通过使用 ->
运算符,我们可以通过指针访问对象的成员。在示例中,我们使用 ptr->myMember
访问 MyClass
对象的 myMember
成员,并将其赋值为 42。
需要注意的是,在使用 ->
访问成员之前,确保指针指向有效的对象。另外,使用 new
创建对象后,需要在适当的时候使用 delete
运算符释放内存,以避免内存泄漏。
3.关于引用和指针
引用
引用是一个别名,它提供了对现有变量的另一个名称或别名。
引用必须在声明时初始化,并且不能重新绑定到另一个变量。
引用一旦绑定到一个变量,就可以像使用原始变量一样使用引用,而无需使用解引用操作符。
引用不能为null,必须始终引用有效的对象。
引用通常用于函数参数传递、函数返回值和在范围内引用对象。
示例:
int x = 5;
int& ref = x; // 引用
ref = 10; // 修改了x的值
std::cout << x; // 输出10
指针
指针是一个变量,它存储另一个对象的内存地址。
指针可以指向任何类型的对象,包括基本类型、自定义类型和函数。
指针可以重新赋值为另一个内存地址,也可以为null(nullptr)。
通过使用解引用操作符(*)可以访问指针指向的对象。
指针需要显式地进行解引用和取址操作。
示例:
int x = 5;
int* ptr = &x; // 指针
*ptr = 10; // 修改了x的值
std::cout << x; // 输出10
总结:
引用是一个别名,它提供了对现有变量的另一个名称,而指针是存储内存地址的变量。
引用必须在声明时初始化,而指针可以在之后进行初始化。
引用不可重新绑定,而指针可以重新指向其他对象。
引用不能为null,而指针可以为null。
引用使用起来类似于原始变量,而指针需要显式地进行解引用和取址操作。