【发布时间】:2013-01-24 01:29:45
【问题描述】:
unsigned char 指针有什么用?我在很多地方都看到过指针类型转换为指向unsinged char 的指针,我们为什么要这样做?
我们收到一个指向int 的指针,然后将它类型转换为unsigned char*。但是,如果我们尝试使用 cout 打印该数组中的元素,它不会打印任何内容。为什么?我不明白。我是 C++ 新手。
编辑下面的示例代码
int Stash::add(void* element)
{
if(next >= quantity)
// Enough space left?
inflate(increment);
// Copy element into storage, starting at next empty space:
int startBytes = next * size;
unsigned char* e = (unsigned char*)element;
for(int i = 0; i < size; i++)
storage[startBytes + i] = e[i];
next++;
return(next - 1); // Index number
}
【问题讨论】:
-
转换为字符指针时,第一个字节可能为零,与字符串终止符相同,因此不会打印任何内容。如果你能展示你真正在做什么,例如发布一些代码,它会更有帮助。请发送SSCCE 并添加到问题中。
-
但是我认为如果第一个字节为零并且实际上我正在尝试打印所有四个字节但它没有打印任何内容。
-
您的问题似乎更多是关于“为什么”而不是“何时”。很多时候,
unsigned char *被用作字节级访问方法,以访问其他更正式类型的变量或内存地址。它有很多优点,其中包括对严格的别名规则的免疫,以及与你扔给它的任何地址的标准保证对齐。如果您对 C 相当熟悉,那么 C++ 的新手应该不会觉得这很困难。编程 的新手,我认为这是一个难以理解的挑战。也许你有一些代码和背后的想法你有疑问? -
我将您的代码移到了您的问题中。您可以在问题中发布任何关于它的 cmets,或对其他 cmets 的回复,都可以在此处发布。