我正在摆弄C中的指针,我仍然不确定一些非常基本的东西。我想出了以下示例代码:
#include <stdio.h>
int main(void)
{
int num = 42; // we want to access this integer
void *vptrB = # // pointer B points to the integer
void *vptrA = &vptrB; // pointer A points to pointer B
printf("%d\n", * (int *) * (void **) vptrA);
return 0;
}
内存应该如下所示:
是否有替代方法可以访问整数?这个例子有什么不好/不安全的吗? * (int *) * (void **) vptrA
是通过num
和vptrA
访问vptrB
的唯一途径吗?
答案 0 :(得分:2)
是否有替代方法可以访问整数?
int num = 42;
int *vptrB = #
int **vptrA = &vptrB;
// All print 42
printf("%d\n", num);
printf("%d\n", *vptrB);
printf("%d\n", **vptrA);
这个例子有什么不好/不安全的地方?
使用void*
表示数据地址会丢失类型,对齐方式,const
和volatile
信息。 void*
迫使使用强制转换来随后解释引用的数据 - 这很容易出错。虽然代码在转换中是正确的,但它会受到维护错误和代码审查错误理解的影响。