浅析·指针

114514年没更新的我来了!

(把这一年所有写的题解和论文发出来啦)

浅析·指针

指针是C++里用来存放变量内存地址的变量,借助地址可以直接访问、修改对应内存里的数据,在函数传参、数组处理中经常使用。

指针思想

普通变量存放的是数据本身,指针变量存放的是数据所在的内存地址。

取地址运算符 & 可以获取变量的地址,解引用运算符 * 可以通过地址访问对应数据。

普通值传递只会复制一份数据,函数内部修改无法影响外部变量;使用指针传递地址,就能直接修改原始数据。

在我老师给我的题库里找到这样一道题,我把它改成了模板题:

题目分析

要求输出从n个数中选取r个数的所有组合,利用指针遍历数组元素,通过指针偏移访问后续元素,控制组合选取范围。

数组名本质就是数组首元素的地址,用指针接收数组首地址,通过指针自增实现遍历,减少下标运算。

核心思路:

设指针 p 指向数组起始位置,指针每次向后移动一位,代表选取下一个元素,递归时用指针限定选取起始位置,保证组合不重复。

核心代码

、、、

void dfs(int *p, int step, int r) {

if (step == r) {

for (int i = 0; i < r; i++)

cout << *(p - r + i) << " ";

cout << endl;

return;

}

for (; *p; p++) {

dfs(p + 1, step + 1, r);

}

}

、、、

完整代码

、、、

#include<bits/stdc++.h>

using namespace std;

void dfs(int *p, int step, int r) {

if (step == r) {

for (int i = 0; i < r; i++)

cout << *(p - r + i) << " ";

cout << endl;

return;

}

for (; *p; p++) {

dfs(p + 1, step + 1, r);

}

}

int main() {

int n, r;

cin >> n >> r;

int a25;

for (int i = 1; i <= n; i++)

ai = i;

dfs(a + 1, 0, r);

return 0;

}

、、、

讲到这里,拜拜┏(^0^)┛

相关推荐
All for pursuit.1 小时前
【回溯-7】494.目标和
数据结构·c++·算法·leetcode
白杨尚青1 小时前
C++入门篇(十三):vector(上)——动态数组:构造、空间增长与迭代器失效
开发语言·c++·笔记·算法·stl
Jasmine_llq1 小时前
《P17461 [GESP202609 八级] 生成树计数》
算法·栈·tarjan 算法·边双连通分量·深度优先搜索 dfs·tarjan 保存当前路径节点·模乘法
Jasmine_llq1 小时前
《P17462 [GESP202609 八级] 末班车》
算法·dijkstra 算法·最大化版本,求最长可行值·建反向图(逆图 / 反转边)·多源 dijkstra 思想·对每个终点单独跑一遍djst·离线预处理 + 在线查询
the3clipse2 小时前
H.265熵编码核心:CABAC自适应二进制算术编码详解——如何将语法元素高效压缩为比特流
人工智能·算法·视频编码·h.265·hevc·cabac·cavlc
CQU_JIAKE2 小时前
10.4【A】
算法
Godspeed Zhao2 小时前
现代智能雷达技术19——算法(5)
算法
(Charon)2 小时前
【C++面试】RAII到底是什么:从资源管理理解C++对象生命周期
c++·算法·面试
Omics Pro2 小时前
之江实验室NAR|虚拟细胞3阶段训练范式
数据库·人工智能·算法·机器学习·自然语言处理
Tisfy2 小时前
LeetCode 0678.有效的括号字符串:O(n)+O(1)一次遍历
算法·leetcode·字符串·题解·贪心·括号匹配