foo(TYPE** p)函数参数用双重指针的问题。。。能提意见者进!

hawkxjy 2003-12-24 11:22:57
1,函数参数是**P(双重指针)时的作用是什么?在功能效果上同参数是*p(单指针)的有什么不同?
2,还有就是何时使用**p好,何时使用*p好呐?
3,双指针在com中用的很多,其中的QueryInterface(...,void** p)接口函数始终保持有个双指针参数,请高手解释一下这样用与用*p做参数的区别,谢谢。
...全文
162 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
hawkxjy 2003-12-25
  • 打赏
  • 举报
回复
有学过com的嘛?讲一下第三个问题,这样更实际一点
langzi8818 2003-12-24
  • 打赏
  • 举报
回复
void swap(int*p1,int*p2)
{
int *c;
c=p1;
p1=p2;
p2=p1;
}
void main()
{
int a=5,b=6;
int*p1=&a,p2=&b;
swap(p1,p2);
}
这样交换了p1和p2的值吗?

liquanle 2003-12-24
  • 打赏
  • 举报
回复
因为你需要按址传送的时候就是双指针,否则,你用单指针,是按值传递。
langzi8818 2003-12-24
  • 打赏
  • 举报
回复
先吃饭,回来再说!
victor_cui 2003-12-24
  • 打赏
  • 举报
回复
双指针多用于指针交换,可以避免数据复制,提升系统的性能,同时还可以让函数修改指针,例如扩充其大小,指向等
zxm954712 2003-12-24
  • 打赏
  • 举报
回复
If you want to change the value the pointer points, you should use double pointer.
for example;
{char *str ;
char caTemp[20] = "abc";
str = caTemp;
foo(&str);
printf("str is %s", str);
}

void foo(char **p);
{
char *s = "def";
*p = s;
}
DisplayWorld 2003-12-24
  • 打赏
  • 举报
回复

我认为更能说明双重指针(指向指针的指针)作用的不是上面各位的用法(那只是一般性使用,不能说明问题).
看看下例:

void sample_alloc_safe_str_1(char **lppsz, unsigned int len)
{
* lppsz = new char[ len + 1 ];
}

void main()
{
char * lpsz = NULL;
sample_alloc_safe_str_1(&lpsz, 100);

Assert(lpsz != NULL); // no assert
...
}

/////////////////////////////////////////////////////////////

void sample_alloc_safe_str_2(char *lpsz, unsigned int len)
{
lpsz = new char[ len + 1 ];
}

void main()
{
char * lpsz = NULL;
sample_alloc_safe_str_2(&lpsz, 100);

Assert(lpsz != NULL); // assert!
...
}
hawkxjy 2003-12-24
  • 打赏
  • 举报
回复
上面几个帅哥顺便把第三个问题给解释一下子。

关于com发表一下点点观点
hongyongzeng 2003-12-24
  • 打赏
  • 举报
回复
不好意思,没看到你已经是五颗星了,班门弄斧
hongyongzeng 2003-12-24
  • 打赏
  • 举报
回复
没有交换,因为swap中的p1、p2在函数调用后就消失了,而swap又没有返回任何数据,对*p1,*p2中的数据又没发改变。

void swap(int *p1,int *p2)
{
int c;
c=*p1;
*p1=*p2;
*p2=c;
}
就OK了
iceheart 2003-12-24
  • 打赏
  • 举报
回复
当你需要这个功能的时候,自然就会想到它了

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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