C++ 指针

C++中的指针用于存储变量的内存地址,允许直接访问和修改该地址中的值。通过声明如`int*pointVar`来创建指针,并使用`&`运算符获取变量的地址,`*`运算符则用于取消引用指针,获取或修改其指向的值。文章通过示例展示了如何声明、分配地址、使用指针以及避免常见错误。
摘要由CSDN通过智能技术生成

C++ 指针

在 C++ 中,指针是存储其他变量的内存地址的变量。

C++ 中的地址

如果程序中有一个变量 var,&var 会告诉我们它在内存中的地址。

示例1:

#include <iostream>
using namespace std;

int main()
{
    // 声明变量
    int var1 = 10;
    int var2 = 20;
    int var3 = 5;

    // 打印var1的地址
    cout << "var1的地址: " << &var1 << endl;

    // 打印var1的地址
    cout << "var2的地址: " << &var2 << endl;

    // 打印var2的地址
    cout << "var3的地址: " << &var3 << endl;
}

结果:

这些地址是一个十六进制的数字, 每一个计算机都有自己的内存地址空间, 所以地址的值可能不同。 变量的地址值可能会在每次程序运行时发生变化。

C++ 指针

如上所述,指针用于存储地址而不是值。

声明指针

int *pointVar;(声明了一个 int 类型的指针 pointVar。)
/
int* pointVar;(首先语法)

int* pointVar, p;(声明了一个指针 pointVar 和一个普通变量 p。)

Note:运算*符用在数据类型之后声明指针。

为指针分配地址

int* pointVar, var;
var = 5;

// 将 var 的地址分配给 pointVar 指针
pointVar = &var;

使用指针从地址中获取值

int* pointVar, var;
var = 5;

//将 var 的地址分配给 pointVar
pointVar = &var;

// 访问 pointVar 指向的值
cout << *pointVar << endl;   // 输出: 5

上面的代码中,var的地址赋给了pointVar。使用 *pointVar 来获取存储在该地址中的值。
当 * 与指针一起使用时,它被称为取消引用运算符。它对指针进行操作,并给出指针中存储的地址指向的值。也就是说,*pointVar = var。

Note:在C++中,point Var和*point Var是完全不同的。不能做*point var=&var;

示例 2(C++ 指针的工作):

#include <iostream>
using namespace std;
int main() {
    int var = 5;

    // 声明指针变量
    int* pointVar;

    // var 的存储地址
    pointVar = &var;

    // 打印var的值
    cout << "var = " << var << endl;

    // 打印var地址
    cout << "var (&var)的地址 = " << &var << endl
        << endl;

    // 打印指针 pointVar
    cout << "pointVar = " << pointVar << endl;

    //打印地址pointVar指向的内容
    cout << "pointVar(*pointVar) 指向的地址的内容= "<< *pointVar << endl;

    return 0;
}

结果:

改变指针指向的值 

如果 pointVar 指向 var 的地址,可以使用 *pointVar 来改变 var 的值。

int var = 5;
int* pointVar;

// 分配var的地址
pointVar = &var;

// 改变地址 pointVar 的值
*pointVar = 1;

cout << var << endl; // 输出: 1

pointVar 和 &var 有相同的地址,改变 *pointVar 时 var 的值也会改变。

示例3(改变指针指向的值):

#include <iostream>
using namespace std;
int main() {
    int var = 5;
    int* pointVar;

    // var 的存储地址
    pointVar = &var;

    // 打印var
    cout << "var = " << var << endl;

    // 打印*pointVar
    cout << "*pointVar = " << *pointVar << endl
        << endl;

    cout << "将 var 的值更改为10:" << endl;

    // 将 var 的值更改为 10
    var =10;

    // 打印var
    cout << "var = " << var << endl;

    // 打印*pointVar
    cout << "*pointVar = " << *pointVar << endl
        << endl;

    cout << "将 var 的值更改为20:" << endl;

    // 将 var 的值更改为 20
    *pointVar = 20;

    // print var
    cout << "var = " << var << endl;

    // 打印*pointVar
    cout << "*pointVar = " << *pointVar << endl;
    return 0;
}

结果:

 使用指针时的常见错误

int var, *varPoint;

// 错误! 
//varPoint 是一个地址,但 var 不是
varPoint = var;

// 错误!
// &var 是一个地址
// *varPoint 是存储在 &var 中的值
*varPoint = &var;

// 正确! 
// VarPoint是一个地址,&var也是
varPoint = &var;

 // 正确!
//*varPoint 和 var 都是值
*varPoint = var;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三千思丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值