如果我知道它的地址,我可以以某种方式访问​​一个值吗?

时间:2014-07-31 05:33:31

标签: c++ c pointers memory-address

说我们有一个变量

    int var = 3000;
    int *pt;
    pt=2293572; //where &var=2293572

问题基本上是通过了解内存地址来间接访问存储在内存位置的值吗? 如果不是在c,cpp我们可以使用其他语言吗?

4 个答案:

答案 0 :(得分:5)

听起来你问的是如何将整数转换为指针并使用它为内存位置赋值。

int var = 3000;
int *pt;
pt= (int*) 2293572; 

// Assignment
*pt = 2; // now var = 2

请注意,当你这样做时,你应该遵守常见的警告,正如Matt McNabb在下面提到的那样。

  • 演员阵容是否为实施定义
  • 地址可能未正确对齐int
  • 您最好确保自己拥有正确的地址

答案 1 :(得分:2)

您问题中给出的示例的正确方法:

int var = 3000;
int *pt = &var;

int x = *pt; // read-access (same as 'int x = var')
*pt = 12345; // write-access (same as 'var = 12345')

如果您有一个“纯”地址(没有在该地址分配的变量名称):

int *pt = (int*)2293572;

int x = *pt; // read-access
*pt = 12345; // write-access

如果基础硬件架构指定的编译器不支持未对齐的加载/存储操作,则必须确保该地址可以被数据类型的大小整除。 / p>

例如,在上面的代码中,您必须断言2293572 % sizeof(int) == 0

答案 2 :(得分:2)

在运行此程序时,您可能已获得#34; var"的地址2293572,但是每次运行程序时都没有必要获得相同的地址。 因此,明确地为变量分配地址然后尝试访问该地址的值不是一个好的做法。 如果你想在c

中使用地址,你需要使用指针

试试这个:

#include<stdio.h>
int main()
{
  int var = 100; // initialise a variable
  int *ptr;      // declare a pointer variable; a pointer is used to store the address
                 // (logical address, to be specific ) of a variable.

  ptr = &var;    // assign the address of the variable to the pointer
  printf("\nvar = %d", *ptr); // access the value stored at that address. This is also  
                               // dereferencing.

} 

答案 3 :(得分:0)

Int car = 3000; //可变汽车 Int final; Int * ptr; //未分配的指针

Ptr =&amp; car; //变量ptr保存汽车的内存位置。

final = * ptr //这是取消引用

Final将返回整数值3000。

为了快速而简单,指针指向内存位置。当你“取消引用”时,你说......“嘿,我不想知道号码的位置,我想知道那里存储的是什么价值。

c的棘手部分是它使用动态内存分配,因此每次都不会保持相同的位置。