C:通过类型转换和解除引用指向(void *)指向(int)的(void *)访问(int)

时间:2016-05-20 23:34:46

标签: c void-pointers

我正在摆弄C中的指针,我仍然不确定一些非常基本的东西。我想出了以下示例代码:

#include <stdio.h>

int main(void)
{
    int num = 42;              // we want to access this integer
    void *vptrB = &num;        // pointer B points to the integer
    void *vptrA = &vptrB;      // pointer A points to pointer B
    printf("%d\n", * (int *) * (void **) vptrA);
    return 0;
}

内存应该如下所示:

scheme

是否有替代方法可以访问整数?这个例子有什么不好/不安全的吗? * (int *) * (void **) vptrA是通过numvptrA访问vptrB的唯一途径吗?

1 个答案:

答案 0 :(得分:2)

  

是否有替代方法可以访问整数?

 int num = 42;
 int *vptrB = &num;
 int **vptrA = &vptrB;
 // All print 42
 printf("%d\n", num);
 printf("%d\n", *vptrB);
 printf("%d\n", **vptrA);
  

这个例子有什么不好/不安全的地方?

使用void*表示数据地址会丢失类型,对齐方式,constvolatile信息。 void*迫使使用强制转换来随后解释引用的数据 - 这很容易出错。虽然代码在转换中是正确的,但它会受到维护错误和代码审查错误理解的影响。