双指针究竟什么时候用到?

c_primer_ 2006-04-07 01:13:18
谢谢了
...全文
1034 12 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
当你能够灵活运用指针的时候,再用另一个指针指向这个指针。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧