[英]How to print a double pointer value in C
我们正在为C中的通用数据类型实现优先级队列。我们认为指针等之间的分配是正确的,但是我们不知道如何在末尾打印“ element”的int值。 你能帮助我吗?
#include <stdio.h>
#include <stdlib.h>
struct _pqElement{
void** data;
void** priority;
};
pqElement* pqElement_new(void* data, void* priority){
pqElement* result = (pqElement*) malloc (sizeof(pqElement));
result->data=&data;
result->priority=&priority;
return result;
}
static int* new_int(int value){
int *elem=(int*)malloc(sizeof(int));
*elem=value;
return elem;
}
int main(int argc, char const *argv[]){
pqElement * element = pqElement_new(new_int(1), new_int(85));
printf("%d-%d", element->data, element->priority);
}
好吧,由于从未定义过pqElement
类型,而仅定义了_pqElement
结构,因此即使是现在的代码也无法编译。
另外,您在printf
中使用%d
,但是传递的参数为void**
,因此需要强制转换值。
这些更改应该可以解决问题:
#include <stdio.h>
#include <stdlib.h>
typedef struct _pqElement{
void** data;
void** priority;
} pqElement;
pqElement* pqElement_new(void* data, void* priority){
static pqElement* result;
result = (pqElement*) malloc (sizeof(pqElement));
result->data=&data;
result->priority=&priority;
return result;
}
int* new_int(int value){
static int *elem;
elem = (int*)malloc(sizeof(int));
*elem=value;
return elem;
}
int main(int argc, char const *argv[]){
pqElement *element = pqElement_new(new_int(1), new_int(85));
printf("%d-%d\n", **((int**)(element->data)), **((int**)(element->priority)));
//need to free the memory allocated with the malloc, otherwise there is a possibility of memory leakage!
}
这只会打印第一个元素,但是您可以使用偏移量指向以下元素。
注意:正如我在代码中的注释中所报告的那样,您需要释放使用malloc分配的内存,否则可能会发生内存泄漏!
您不需要两个级别的指针。
#include <stdio.h>
#include <stdlib.h>
struct pqElement{
void *data;
void *priority;
};
struct pqElement* pqElement_new(void* data, void *priority)
{
struct pqElement* result = malloc(sizeof(struct pqElement));
result->data = data;
result->priority = priority;
return result;
}
static int* new_int(int value)
{
int *elem = malloc(sizeof(int));
*elem=value;
return elem;
}
int main(int argc, char const *argv[])
{
struct pqElement *element = pqElement_new(new_int(1), new_int(85));
printf("%d-%d", *(int*)element->data, *(int*)element->priority);
}
最后,如亚历山大·潘(Alexander Pane)所述,打印值需要以正确的方式转换指针。
对优先级使用不同的类型也会使队列的通用性降低。 您需要提供用于分类,打印等的不同功能。
感谢大伙们。 我需要代码也可以用于字符串,所以我做到了:
static char* new_string(char* value){
char* elem= malloc (sizeof(char));
strcpy(elem, value);
return elem
}
像这样打印:
int main(int argc, char const *argv[]){
struct pqElement *element = pqElement_new(new_string("Hello"), 85);
printf("%s-%d", *(char*)element->data, element->priority);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.