gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 17:25:33 27 4
gpt4 key购买 nike

我正在摆弄 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 是通过 vptrAvptrB 访问 num 的唯一方法吗>?

最佳答案

Are there alternatives to access the integer?

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

Anything bad/unsafe with the example?

使用void* 表示数据地址会丢失类型、对齐方式、constvolatile 信息。 void* 强制使用转换来随后解释引用的数据——这很容易出错。尽管代码的转换是正确的,但它容易出现维护错误和代码审查误解。

关于C: 通过类型转换和取消引用访问 (int) 通过 (void *) 指向 (void *) 指向 (int),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37357320/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com