说我们有一个变量
int var = 3000;
int *pt;
pt=2293572; //where &var=2293572
问题基本上是通过了解内存地址来间接访问存储在内存位置的值吗? 如果不是在c,cpp我们可以使用其他语言吗?
答案 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的棘手部分是它使用动态内存分配,因此每次都不会保持相同的位置。