C++ 指针

在本文中,您将学习有关指针的所有知识。您将学习如何将值存储在计算机中以及如何使用指针访问它们。

指针是C++的强大特性,它将C++与其他编程语言(如Java和Python)区分开来。

指针在C ++程序中用于访问内存和操纵地址。

C ++地址

要了解指针,您首先应该知道如何在计算机上存储数据。

在程序中创建的每个变量都在计算机内存中分配了一个位置。变量存储的值实际上存储在指定的位置中。

为了知道数据存储在哪里,C++有一个&操作符。操作符& (reference)给出变量占用的地址。

如果var是变量,则&var给出该变量的地址。

示例1:C ++中的地址

#include <iostream>
using namespace std;

int main()
{
    int var1 = 3;
    int var2 = 24;
    int var3 = 17;
    cout << &var1 << endl;
    cout << &var2 << endl;
    cout << &var3 << endl;
}

输出结果

0x7fff5fbff8ac
0x7fff5fbff8a8
0x7fff5fbff8a4

注意: 在您的系统上可能不会得到相同的结果。

开头的0x表示地址为十六进制格式。

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

这是因为在64位系统中,整数(类型为int的变量)的大小为4个字节。

指针变量

C ++使您能够直接操作计算机内存中的数据。 您可以根据需要分配和取消分配内存中的任何空间。 这是使用Pointer(指针)变量完成的。

指针变量是指向内存中另一个变量所指向的特定地址的变量。

如何声明一个指针?

int *p;
      或,
int* p;

上面的语句定义了一个指针变量p。它保存了内存地址

星号(*)是解引用运算符,表示指向的指针

在这里,指针p是指向int的指针,即它指向存储器地址中的整数值。

引用运算符(&)和引用运算符(*)

如上所述的引用运算符(&)给出了变量的地址。

要获取存储在内存地址中的值,我们使用解引用运算符(*)。

例如:如果number变量存储在内存地址0x123中,并且它包含一个值5

reference(&)操作符给出值0x123,而dereference(*)操作符给出值5

注意:注意:c++指针声明中使用的(*)符号不是引用指针。它只是一个创建指针的类似符号。

示例2:C ++指针

C ++程序演示了指针的工作。

#include <iostream>
using namespace std;
int main() {
    int *pc, c;
    
    c = 5;
    cout << "Address of c (&c): " << &c << endl;
    cout << "Value of c (c): " << c << endl << endl;

    pc = &c;    // 指针pc保存变量c的内存地址
    cout << "pc持有的指针地址(pc): "<< pc << endl;
    cout << "地址指针pc持有的值(*pc): " << *pc << endl << endl;
    
    c = 11;    // 内存地址&c中的值从5更改为11。
    cout << "地址指针pc持有(pc): " << pc << endl;
    cout << "地址指针pc持有的内容(*pc): " << *pc << endl << endl;

    *pc = 2; 
    cout << "Address of c (&c): " << &c << endl;
    cout << "Value of c (c): " << c << endl << endl;

    return 0;
}

输出结果

Address of c (&c): 0046FD44
Value of c (c): 5

pc持有的指针地址(pc): 0046F
地址指针pc持有的值(*pc): 5

地址指针pc持有(pc): 0046FD4
地址指针pc持有的内容(*pc):

Address of c (&c): 0046FD44
Value of c (c): 2

程序的用法说明

  • 当c = 5;值5存储在变量c-0x7fff5fbff8c 的地址中。

  • 当pc = &c;指针pc的地址为c-0x7fff5fbff8c时,表达式(解引用运算符)*pc输出存储在该地址中的值5。

  • 当c = 11;由于pc持有的地址指针与c - 0x7fff5fbff8c相同,所以当执行表达式*pc时,c的值也会发生变化,现在输出11。

  • 当*pc = 2时;它改变了pc - 0x7fff5fbff8c存储的地址的内容。这个从11变成了2。因此,当我们输出c的值时,这个值也是2。

使用指针时的常见错误

假设您希望指针pc指向c的地址。然后,

int c, *pc;
pc=c;  /* 错误!  pc是地址,而c不是地址。 */
*pc=&c; /*错误!  * pc是地址指向的值,而&c是地址。*/
pc=&c; /* 正确!  pc是一个地址,&c也是一个地址。 */
*pc=c; /* 正确!  * pc是地址指向的值,而c也是一个值。 */

在这两种情况下,指针pc都不是指向c的地址。

您还应该查看这些与指针相关的教程: