[英]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.