社区
C语言
帖子详情
双指针究竟什么时候用到?
c_primer_
2006-04-07 01:13:18
谢谢了
...全文
1043
12
打赏
收藏
双指针究竟什么时候用到?
谢谢了
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
allen_wang
2006-04-07
打赏
举报
回复
你有一个指针,当需要改其值时,如果需要交由一个函数来修改,而且是通过参数传入做修改,那就要传这个指针的地址,也就是说参数类型是指针的指针了。
c_primer_
2006-04-07
打赏
举报
回复
void swap(int **p1,int **p2)
{
/* int **p = *p1;*/
int **p = p1;//更改为这样
*p1 = *p2;
*p2 = *p;
}
——————————调试出错
第一个值等于第二个了,但第二个没变。。。
头昏昏的。。。看得。
请问jixingzhong,“操作结果将不能反馈回去 ...”是什么意思啊。反馈到哪去?
很不好意思。麻烦你了!
imfeather
2006-04-07
打赏
举报
回复
void swap(int **p1,int **p2)
{
/* int **p = *p1;*/
int **p = p1;//更改为这样
*p1 = *p2;
*p2 = *p;
}
——————————调试出错
c_primer_
2006-04-07
打赏
举报
回复
void swap(int **p1,int **p2)
{
int **p = *p1;
*p1 = *p2;
*p2 = *p;
}
——————————调试出错
c_primer_
2006-04-07
打赏
举报
回复
原来已经写了
多谢了!!!
逸学堂
2006-04-07
打赏
举报
回复
简单例子说明。
void swap(int *p1,int *p2)
{
int *p = p1;
p1 = p2;
p2 = p;
}
void swap(int **p1,int **p2)
{
int **p = *p1;
*p1 = *p2;
*p2 = *p;
}
int i = 5,j = 6;
int *p1 = i;
int *p2 = j;
第一个调用
swap(p1,p2); // i,j的值没有互换
第二个调用
swap(&p1,&p2); // i,j的值实现互换
c_primer_
2006-04-07
打赏
举报
回复
能否写个具体例子呢?
jixingzhong
2006-04-07
打赏
举报
回复
例如链表创建:
type *list_create(type *head)
{
type *p=(type *)malloc(sizeof(type));
...
}
这里,如果操作是 *head = *p;
那么结果是可以反馈的,
因为指针是解引用操作的。
但是,
对链表,
需要做的往往有这样的操作: head = p
这里,指针被直接操作,
没有解引用,
操作结果将不能反馈回去 ...
(这里其实就是传值一个道理,只是这个值是个指针而已)
这个时候,
就可以考虑使用多级指针:
type *list_create(type **head)
{
type *p=(type *)malloc(sizeof(type));
...
}
main()
{
type *head;
...
list_create(&head);
...
}
*head = p; //指针解引用操作,可反馈
adintr
2006-04-07
打赏
举报
回复
COM 组件中用得非常之多,当你需要通过参数来返回一个指针的时候就需要指向指针的指针了。
COM 组件的接口返回值一般都是固定的 HRESULT, 其他的返回都通过参数来的。
其中最基本的接口就使用指向指针的指针
HRESULT _stdcall QueryInterface(const IID& riid, void ** ppv)
jixingzhong
2006-04-07
打赏
举报
回复
简单的实际例子:
当函数要操作的是指针本身时候,
这个传递进去的指针其实就是和传值是一个效果,
如果要把在这个函数中的操作反馈到主调函数中的话,
多级指针就有用武之地了 ~
(当然也可以有其他的办法)
c_primer_
2006-04-07
打赏
举报
回复
主要用在什么时候啊
fiftymetre
2006-04-07
打赏
举报
回复
当你能够灵活运用指针的时候,再用另一个指针指向这个指针。
双指针
什么时候使用?
在解决ACM竞赛中的问题时,
双指针
是一种常用的技巧,特别适用于数组、字符串等数据结构的处理。4. 三数之和: 对于找到数组中三个数的组合使得它们的和等于目标值的问题,可以使用三个指针(左、右、中间)来处理。3. 快慢指针: 在链表中判断是否存在环、找到环的起点、判断链表中的中间节点等问题,使用快慢指针可以高效解决。2. 滑动窗口问题: 处理连续子数组或子串的问题,通过调整窗口的左右边界,使用
双指针
技巧来维护窗口内的状态。6. 区间合并: 在处理区间合并的问题时,可以使用左右
双指针
,合并相邻或有交集的区间。
算法总结:
双指针
算法(什么时候该使用、如何使用)
算法总结:
双指针
算法的理解和使用思路简介一:从一个C++语言程序开始1.基础解法2.
双指针
解法二:Leetcode实战总结注 简介
双指针
算法指的是在重复遍历对象的过程中,不是在两个循环中使用单个指针进行重复访问,而是在一个循环中使用两个相同方向(快慢指针)或者相反方向(对撞指针)的指针进行访问。 一:从一个C++语言程序开始 给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找
【算法】
双指针
及其使用场景
双指针
及其应用场景
【超详细~】
双指针
算法的使用
双指针
算法的使用总结,包括类型、应用场景、以及常见的算法例题
判断链表是否有环,使用
双指针
的解法时,为什么快指针步长必须为2?
在判断链表是否带环时,我们经常会
用到
一种
双指针
的解法非常的简单,快指针步长为2,慢指针步长为1,这样如果有环,它们肯定会在某个时刻相遇。 那么问题来了,是否可以让快指针的步长为3,4,或者n呢?接下来我们分析一下: 我们假设,快指针的步长为b,并且在慢指针走到环口的时候,已经走了x个步次,环长为len。 那么在慢指针走到环口的时候,快慢指针在环内就会相差:(x*(b-1) )个步长(如果没走,x为0,相差也为0;所以无论环口在第一个节点或者是其它位置节点,都是可以推算出来这样的表达式) 事实上,.
C语言
70,021
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章