双指针操作。 建议解决方法。
#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 功能20 主要20
答案 0 :(得分:2)
这是您需要在func(void **p1)
中执行的操作:
printf("Func %d\n",*((int *)*p1));
你必须再次取消引用它才能获得int
值 - 因为它是一个指向指针的指针。
而且,do not cast the return of malloc
(仅适用于C)。在C ++中,需要强制转换(更好地使用new
运算符)。
在主要内容中,您可以直接执行此操作:
printf("Main %d",*((int *)*(( (void**)&p))));
答案 1 :(得分:1)
函数中的printf应为:
printf("Func %d\n", *((int*)*p1));
在函数中,p1
具有整数指针int * p
的地址。这意味着像*p1
一样取消引用它等同于原始指针p
。因此,我们将其转换为int *
并再次取消引用它以获取值。