在本文中,您将学习有关指针的所有知识。您将学习如何将值存储在计算机中以及如何使用指针访问它们。
指针是C++的强大特性,它将C++与其他编程语言(如Java和Python)区分开来。
指针在C ++程序中用于访问内存和操纵地址。
要了解指针,您首先应该知道如何在计算机上存储数据。
在程序中创建的每个变量都在计算机内存中分配了一个位置。变量存储的值实际上存储在指定的位置中。
为了知道数据存储在哪里,C++有一个&操作符。操作符& (reference)给出变量占用的地址。
如果var是变量,则&var给出该变量的地址。
#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++指针声明中使用的(*)符号不是引用指针。它只是一个创建指针的类似符号。
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的地址。
您还应该查看这些与指针相关的教程: