在只知道每个元素的大小的情况下获取 void 指针的值

getting values of void pointer while only knowing the size of each element

首先我会说我看到了一堆标题相似但没有关注我的问题的帖子

我的任务是创建一个接收 void* arr、unsigned int sizeofArray 和 unsigned int sizeofElement 的函数 我设法毫无问题地遍历数组,但是当我尝试打印出值或对它们做任何事情时,除非我事先指定它们的类型,否则我似乎得到了垃圾

这是我的职能:

 void MemoryContent(void* arr, unsigned int sizeRe, unsigned int sizeUnit)
{
int sizeArr = sizeRe/sizeUnit;

for (int i = 0; i < sizeArr ; i++)
{
    
    printf("%d\n",arr); // this one prints garbage
    printf("%d\n",*(int*)arr); // this one prints expected values given the array is of int*
    arr = arr + sizeUnit;
}

}

使用以下数组(int arr[] = {1, 2, 4, 8, 16, 32, -1};)的输出是:

-13296 1
-13292 2
-13288 4
-13284 8
-13280 16
-13276 32
-13272 -1

我意识到我必须以某种方式指定类型。虽然 printf 实际上不会被使用,因为我需要其中任何值的二进制表示(已经在不同的函数中得到处理)我仍然不确定如何在知道元素大小的情况下不进行强制转换就获得实际值 任何解释将不胜感激!

注意:使用的编译器是 gcc,因此允许使用指针算法

编辑澄清: 格式化后的输出以及上一个示例给定数组的所有内容应如下所示

00000000 00000000 00000000 00000001 0x00000001
00000000 00000000 00000000 00000010 0x00000002
00000000 00000000 00000000 00000100 0x00000004
00000000 00000000 00000000 00001000 0x00000008
00000000 00000000 00000000 00010000 0x00000010
00000000 00000000 00000000 00100000 0x00000020
11111111 11111111 11111111 11111111 0xFFFFFFFF

getting values of void pointer getting values of void pointer while only knowing the size of each element

不可能在只知道每个元素的大小的情况下获取空指针的值

假设大小为4,元素是int32_tuint32_tfloatboolsome struct,或enum,一个指针,等等?是否有任何位填充?正确解释这些位需要的不仅仅是只知道大小

代码可以打印出 void *ptr 处的位,并将解释留给用户。

unsigned char bytes[sizeUnit];
memcpy(bytes, ptr, sizeUnit);
for (size_t i = 0; i<sizeof bytes; i++) {
  printf(" %02X", bytes[i]);
}

存在简化。


OP 的代码 void* arr, ... arr = arr + sizeUnit; 不是可移植代码,因为添加到 void * 不是由 C 标准定义的。一些编译器确实允许它,类似于指针是一个 char 指针。