目录
必看信息
Everyday English
前言
📝了解指针
📝定义指针
📝分析指针
📝运用指针
总结
必看信息
▶本篇文章由爱编程的小芒果原创,未经许可,严禁转载。
▶本篇文章被收录于秒懂百科,C++如此简单专栏,欢迎订阅。
专栏亮点
1.每篇文章质量高,质量分保证在80分以上。
2.文章的内容清晰有条理,图文并茂,附有yuan。
3.每个知识点讲解详细,会有很多补充扩展。
4.若哪个知识点没有懂,可以私信我,我会尽可能地帮助你。
Everyday English
"The only thing we can do is to do our best and not worry about the future." - Confucius
我们唯一能做的就是尽全力,不为未来担忧。- 孔子
前言
在计算机科学中,指针是一个重要的概念,尤其在诸如C和C++等语言中。指针允许我们直接访问和操作内存地址,提供了强大的数据处理能力。理解指针对于深入理解计算机工作原理以及解决复杂问题至关重要。
📝了解指针
首先,我们来看什么是变量。在计算机编程中,变量是一个存储空间,用来保存一些值。每个变量都有一个名称,通过这个名称我们可以访问它的值。变量最直白的理解就是:变化的值
然后,我们来看指针。指针其实也是一个变量,但它存储的不是一个具体的值,而是一个地址。这个地址指向另一个变量的位置。所以,当我们说一个指针指向一个变量时,意思是这个指针存储的是那个变量的内存地址。
在C++中,我们用“*”这个符号来表示一个变量是指针。比如,“int *p”这个声明,意思是“p”是一个指向整数的指针。
📝定义指针
首先我们要生命一下指针,数据类型你可以根据需要去修改:
int *p;//声明一个整型指针
然后我们可以初始化这个指针,让它指向一个特定的内存地址,我们可以让p指向一个整数值:
int val=10;
ptr = &val;//个人建议把指针前后可以空一格,看得更舒服美观
这里的“&”符号用于获取变量的内存地址,学过C语言的朋友们应该清楚,scanf语句需要用到“&”:
int n;
scanf("%d",&n);
一旦我们有了指向某个变量的指针,我们就可以通过指针来访问和修改变量的值。例如,我们可以使用“*”符号来获取指针指向的变量的值:
int val = 10;
int *p = &val;
cout<<"The value is:"<<*p<<endl;
分析上述代码,首先我们定义val=10,而指针p访问并获取了val的值,所以输出应该是:
指针还可以修改变量的值,如:
int val = 10;
int *p = &val;
*p=25;
cout<<"The value is:"<<*p<<endl;
因为*p的值改变成了25,所以输出理所当然是:
📝分析指针
指针的利:
- 动态内存管理: 指针可以用于动态内存分配,这在处理大量数据或需要根据运行时情况调整内存使用时非常有用。
- 数据共享与修改: 通过指针,多个函数或对象可以共享和修改同一内存地址中的数据,有助于实现更高效的数据共享和同步。
- 提高性能: 在某些情况下,使用指针可以直接访问内存,可能比常规变量访问更快。
指针的弊:
- 增加复杂性: 指针和指针操作增加了代码的复杂性,可能导致阅读和理解代码的难度增加。
- 安全风险: 不正确的指针操作可能导致缓冲区溢出、越界访问等安全问题,可能被利用进行攻击。
- 性能开销: 在某些情况下,不恰当的指针使用可能导致额外的内存访问和处理器开销。
时间复杂度:
当指针执行赋值运算时,复杂度为O(1)。
📝运用指针
题目:交换两个变量的值
题目描述:给定两个变量a和b,请使用指针来交换它们的值。
要求:只能使用指针进行交换,不能使用其他变量或直接赋值。
思路点拨:
- 定义两个指针变量,分别指向变量a和b的地址。
- 使用指针修改变量的值,将a的值赋给b的地址所指向的变量,将b的值赋给a的地址所指向的变量。(可以用我们之前学过的交换函数,也可以写一个临时变量tmp)
AC代码:
#include<bits/stdc++.h>
using namespace std;
void swap(int *a,int *b)
{ int tmp = *a; //将a的值存储到临时变量temp中 *a = *b; //将b的值赋给a的地址所指向的变量 *b = tmp; //将临时变量temp(原a的值)赋给b的地址所指向的变量
}
int main()
{ int a=5,b=10; //值可以自己修改 cout<<"交换前:a="<<a<<",b="<<b<<endl;swap(&a, &b);cout<<"交换后:a="<<a<<",b="<<b<<endl; return 0;
}
运行截图:
总结
本篇文章讲解了指针的运用及定义,欢迎大家指出错误。