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
。