c++指针是什么?
大约 3 分钟
inside指针
概念
语法:type* var_name;

- 指针是个存储地址的变量:
指针是一种特殊类型的变量,它存储的是内存地址,这个地址指向存储器中的某个数据。
指针有两大能力:
- 指针有修改指向(某个变量)的值的能力: 通过指针,你可以访问和修改所指向内存地址上的数据。例如,如果有一个指向整数的指针,你可以通过解引用操作符
*来获取或修改该整数的值。
int num = 42; int* ptr = # *ptr = 100; // 修改了ptr指向的地址上的值,即修改了num的值- 指针是个变量有修改本身指向地址的能力: 你可以改变指针本身存储的地址,使其指向不同的内存位置。这是通过给指针赋予一个新的地址来实现的。
int num1 = 42; int num2 = 100; int* ptr = &num1; // ptr指向num1的地址 ptr = &num2; // 修改了ptr本身存储的地址,使其指向num2的地址- 指针有修改指向(某个变量)的值的能力: 通过指针,你可以访问和修改所指向内存地址上的数据。例如,如果有一个指向整数的指针,你可以通过解引用操作符
案例
#include <iostream>
using namespace std;
int main() {
int a = 10; // 1.定义一个整数变量 a
int* p = &a; // 2.定义一个指针变量 p,并将 a 的地址赋给它
cout<<p<<endl;// 3.现在,p 是一个指针变量,存储了 a 的地址
cout<<*p<<endl;// 4.*p 可以用来操作 a 的值,即解引用操作
*p = 20; // 5.修改 a 的值为 20,注意看IDE展示的a值变化
return 0;//6.结束
}
运行后

解析
指针的声明和定义:(和之前文章变量声明和定义通)当你声明一个指针时,你正在告诉编译器:“我有一个指针,它将存储某个特定类型的地址。”在
int* p;这个声明中,p被定义为一个能够存储int类型地址的指针。取地址操作 (
&a): 在p = &a;中,&a表示取得变量a的地址。这是一个右值操作(后续理解左右值通),返回的是a的地址,而不是a的值。指针赋值 (
p = &a;): 将&a赋给p,实际上是将a的地址存储在p中。这时,p成为了指向a的指针。解引用操作符 (
*p): 当你使用*p时,你告诉编译器:“给我指针p所指向的地址上的值。”这是一个左值操作,返回的是a的值,而不是a的地址。赋值操作 (
*p = 10;): 现在,由于p存储了a的地址,*p就相当于在操作a。因此,*p = 10;相当于10赋给了a。



