我对C ++编程缺乏经验,现在我正在尝试用dctmk制作一个小程序来修改dicom图像的像素数据。在阅读文档的过程中,我发现了一个c ++方法,我不太清楚。在课程DicomImage的文档中,我找到了以下方法:
int DicomImage::getOutputData ( void * buffer,
const unsigned long size,
const int bits = 0,
const unsigned long frame = 0,
const int planar = 0
)
我的困惑是buffer
。它在链接中引用为
buffer:指向内存缓冲区的指针(必须已经分配)
这里我的困惑是我如何分配?我不确定如何分配一个void类型指针的内存。你能解释一下吗?谢谢。
答案 0 :(得分:5)
您可以通过以下方式执行此操作(例如):
void * mem = malloc(1024); // 1 kb
image.GetOutputData(mem, 1024);
// Don't forget to free(mem);
另一种方式:
char * mem = new char[1024];
image.GetOutputData((void *)mem, 1024);
// Don't forget to delete[] mem;
另一种方式:
char mem[1024];
image.GetOutputData((void *)&mem, 1024);
答案 1 :(得分:4)
指向void
的指针可以指向任何内容,它是指向某些内存的通用非描述性匿名指针。这意味着您可以将任何类型的指针作为函数的第一个参数传递,因为所有指针都可以隐式转换为void*
。
答案 2 :(得分:0)
您可以分配任何类型的缓冲区。它将使用void *进行转换。但是,您需要传递适当大小的元素。您需要参考api的文档,了解每个缓冲区元素的大小。在下面的示例中,它是1个字节。总缓冲区大小为10。
int size_of_buffer = 10;
unsigned char *buffer = malloc(sizeof(unsigned char)*size_of_buffer);
答案 3 :(得分:0)
看起来DicomImage::getOutputData
并不关心你如何分配你的字节。只需将指针指向您选择的某个blob(对象,结构,数组等),然后将其转换为void*
。您可以使用new
,malloc
获取内存,也可以将其作为本地变量。
可以肯定:
size
参数。DicomImage::getOutputData
使用的数据格式。