亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

C++ 指针

C++ 指针

在本教程中,我们将通过示例了解 C++ 中的指针及其工作原理。

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

C++ 中的地址

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

示例 1:在 C++ 中打印变量地址

#include <iostream>
using namespace std;

int main()
{
    // declare variables
    int var1 = 3;
    int var2 = 24;
    int var3 = 17;

    // print address of var1
    cout << "Address of var1: "<< &var1 << endl;

    // print address of var2
    cout << "Address of var2: " << &var2 << endl;

    // print address of var3
    cout << "Address of var3: " << &var3 << endl;
}

输出

Address of var1: 0x7fff5fbff8ac
Address of var2: 0x7fff5fbff8a8
Address of var3: 0x7fff5fbff8a4

这里,0x 开头代表地址是十六进制形式。

请注意,第一个地址与第二个地址相差 4 个字节,第二个地址与第三个地址相差 4 个字节。

这是因为 int 的大小 变量在 64 位系统中为 4 个字节。

注意: 运行程序时可能不会得到相同的结果。


C++ 指针

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

下面是我们如何声明指针。

int *pointVar;

在这里,我们声明了一个指针 pointVar int 输入。

我们也可以通过以下方式声明指针。

int* pointVar; // preferred syntax

我们再举一个声明指针的例子。

int* pointVar, p;

在这里,我们声明了一个指针 pointVar 和一个普通变量 p .

注意: * 在数据类型之后使用操作符来声明指针。


为指针分配地址

以下是我们如何为指针分配地址:

int* pointVar, var;
var = 5;

// assign address of var to pointVar pointer
pointVar = &var;

这里,5 分配给变量 var .并且,var的地址 分配给 pointVar 代码为 pointVar = &var 的指针 .


使用指针从地址中获取值

要获取指针指向的值,我们使用 * 操作员。例如:

int* pointVar, var;
var = 5;

// assign address of var to pointVar
pointVar = &var;

// access value pointed by pointVar
cout << *pointVar << endl;   // Output: 5

在上面的代码中,var的地址被赋值给了pointVar .我们使用了 *pointVar 获取存储在该地址中的值。

* 与指针一起使用,它被称为 dereference operator .它对指针进行操作,并给出存储在指针中的地址所指向的值。即*pointVar = var .

注意:在 C++ 中, pointVar*pointVar 完全不同。我们不能做像 *pointVar = &var; 这样的事情


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

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

    // declare pointer variable
    int* pointVar;

    // store address of var
    pointVar = &var;

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

    // print address of var
    cout << "Address of var (&var) = " << &var << endl
         << endl;

    // print pointer pointVar
    cout << "pointVar = " << pointVar << endl;

    // print the content of the address pointVar points to
    cout << "Content of the address pointed to by pointVar (*pointVar) = " << *pointVar << endl;
    
    return 0;
}

输出

var = 5
Address of var (&var) = 0x61ff08

pointVar = 0x61ff08
Content of the address pointed to by pointVar (*pointVar) = 5
<图>

指针指向的改变值

如果 pointVar 指向 var 的地址 ,我们可以改变 var 的值 通过使用 *pointVar .

例如,

int var = 5;
int* pointVar;

// assign address of var
pointVar = &var;

// change value at address pointVar
*pointVar = 1;

cout << var << endl; // Output: 1

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


示例 3:更改指针指向的值

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

    // store address of var
    pointVar = &var;

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

    // print *pointVar
    cout << "*pointVar = " << *pointVar << endl
         << endl;

    cout << "Changing value of var to 7:" << endl;

    // change value of var to 7
    var = 7;

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

    // print *pointVar
    cout << "*pointVar = " << *pointVar << endl
         << endl;

    cout << "Changing value of *pointVar to 16:" << endl;

    // change value of var to 16
    *pointVar = 16;

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

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

输出

var = 5
*pointVar = 5

Changing value of var to 7:
var = 7
*pointVar = 7

Changing value of *pointVar to 16:
var = 16
*pointVar = 16

使用指针时的常见错误

假设,我们想要一个指针 varPoint 指向 var 的地址 .那么,

int var, *varPoint;

// Wrong! 
// varPoint is an address but var is not
varPoint = var;

// Wrong!
// &var is an address
// *varPoint is the value stored in &var
*varPoint = &var;

// Correct! 
// varPoint is an address and so is &var
varPoint = &var;

 // Correct!
// both *varPoint and var are values
*varPoint = var;

推荐读物


C语言

  1. C++ 数据类型
  2. C++ 运算符
  3. C++ 注释
  4. C++ 类模板
  5. C 指针
  6. 带有示例的 C++ 指针
  7. C - 指针
  8. C++ 概述
  9. C++ 常量/文字
  10. C++ 中的运算符
  11. C++ 中的数字
  12. C++ 参考资料