gpt4 book ai didi

c - 有什么方法可以在 C 中取消引用内存地址吗?

转载 作者:行者123 更新时间:2023-11-30 16:22:23 25 4
gpt4 key购买 nike

我了解 C 中指针的工作原理。指针基本上存储内存的地址(例如 addr1),取消引用指针可以为我们提供存储在该内存地址的值地址1。有什么可能的方法可以让我们直接取消引用内存地址addr1来获取存储在该位置的值?

我知道如何使用指针。我只是想知道后面到底发生了什么。我尝试使用内存地址在下面的代码中创建指针如何工作的相同场景。尽管我陷入了从指针获取值的困境。通过这个例子,我想知道指针的取消引用是如何工作的。

例如:

#define LOCATION 0x68feac //Assuming that the memory location is available

int main()
{
int a = 10;
*(int *)LOCATION = (int)&a;
printf("%x\n", (*(int*)(LOCATION))); //It gives me the address of a
printf("%x\n", *((*(int*)(LOCATION)))); /* I thought it would de-refer but
it gives me compile time error
"invalid type argument of unary
'*'" */

}

我尝试使用

如何取消引用LOCATION以便我们可以获得值10?任何想法或建议都会有帮助。

最佳答案

您要求的是:

printf("%x\n", *((int *)(*(int*)(LOCATION))));

因为在取消引用之前,您需要将从 *(int*)(LOCATION) 检索到的 int 值转换为指针。

但你真的不这样做!这是一种丑陋的语法,而 C 编译器在优化无用变量方面非常出色。所以帮自己一个忙,命名中介指针:

#define LOCATION 0x68feac //Assuming that the memory location is available

int main()
{
int a = 10;
int **loc = (int **)LOCATION; // BEWARE only make sense in very special use cases!
*loc = &a;
printf("%p\n", *loc); //It gives me the address of a
printf("%x\n", **loc);
return 0;
}

无论如何,在 C 语言中很少使用任意内存位置,因为编译器(和链接器)将使用你很难猜到的地址。我知道的唯一用例是访问嵌入式系统或内核模块中众所周知的物理地址

关于c - 有什么方法可以在 C 中取消引用内存地址吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54457408/

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