0

操纵的双指针。建议解决方法。

#include <iostream>
#include <stdio.h>
using namespace std;
/* Pointer Passed as argument */
void func(void **p1)
{
     printf("Func %d\n",*p1);
}
/* main Function */
int main()
{ 
 void **p1 = NULL;
 int *p = (int *)malloc(sizeof(int));
 p[0] = 20;
 func((void**)&p);//pass by address
 //How can we assign double pointer i.e (*p1 = &p)
 printf("Main %d",*p);   // print value
 cin.get();
 return 0;   
}
//function end main.cpp
/*
Func " Garbage value "
Main 20
*/

我正在尝试使用双指针来检索数据。有人可以调查一下,让我知道错误在哪里。

输出应该是 20 - 20 Func 20 Main 20

4

2 回答 2

2

这是你需要做的func(void **p1)

printf("Func %d\n",*((int *)*p1));

您必须再次取消引用它才能获得该int值 - 因为它是一个指向指针的指针。

并且,不要强制返回malloc(仅适用于C)。在 C++ 中,强制转换是必需的(最好使用new运算符)。

在 main 中,您可以直接执行此操作:

  printf("Main %d",*((int *)*((  (void**)&p))));  
于 2013-10-29T05:04:02.377 回答
1

函数中的 printf 应该是:

printf("Func %d\n", *((int*)*p1));

在函数中,p1有整数指针的地址int * p。这意味着取消引用一次*p1就相当于原始指针p。因此,我们将其转换为 anint *并再次取消引用以获取值。

于 2013-10-29T05:02:50.430 回答