在C语言中如果已经知道了一个数据的内存地址,怎样直接从内存中读取出该数据?
发布网友
发布时间:2022-05-22 08:03
我来回答
共5个回答
热心网友
时间:2024-03-07 12:18
要读取内存数据的话,只能通过指针,你只能通过自己定义一个int的指针,让他指向一个内存地址,然后通过*指针的形式读出来。
你说的“我不想通过指针变量来直接输出该int数据的值,而是想直接读取内存的数据,看看和我定义的int数据值是否相同。”是没意义的,就好像你要确定我这个人是不是我这个人一样,如果你一定要写的话,可以写成这样。
#include<stdio.h>
int main()
{
int a=123,b=1234567;
int adda=&a,addb=&b;
int *m,*n;
m=adda;
n=addb;
//printf("*m=%d\t,*n=%d\n",*m,*n); //这里不用指针变量直接输出int数据
printf("m=%d\t,n=%d\n",a,b);
return 0;
}
这里的m和n已经和a,b没有任何逻辑联系了,他们只是表示两个内存段的数据而已。
再明确点可以写成
#include<stdio.h>
int main()
{
int a=123,b=1234567;
int adda=&a,addb=&b;//adda和addb仅仅表示两个内存地址
int contenta,contentb;
contenta=*adda;
contentb=*addb;//这两句的含义是两个内存地址里面的内容,他们和变量a,b没有逻辑关系
//printf("*m=%d\t,*n=%d\n",contenta,contentb); //这里不用指针变量直接输出int数据
printf("m=%d\t,n=%d\n",a,b);
return 0;
}
这里就是你说的比较a以及a所在的内存块(adda)里面内容是不是和a相等
热心网友
时间:2024-03-07 12:18
#include <stdio.h>
#include <string.h>
void main()
{
int *p;
int i=10;
p=(int*)0x0012ff78;//i的地址
printf("%d\n",*p);
}
输出的结果为10,你先调试下,可以知道i的地址
*P等价于*(int*)0x0012ff78
热心网友
时间:2024-03-07 12:19
#include<stdio.h>
int main()
{
int a=123,b=1234567;
int *m,*n;
m=&a;
n=&b;
printf("*m=%d\t,*n=%d\n",*m,*n);//打印指针指向的值
printf("m=%d\t,n=%d\n",m,n);//打印指针内存地址对应的十进制数,因为过大,会显示为一个 负数
printf("m=%p\t,n=%p\n",m,n);//打印指针类型的数据,即指针本身的地址
getch();
return 0;
}
输出的结果是:
*m=123 ,*n=-10617
m=-54 ,n=-52
m=FFCA ,n=FFCC
可以看到,b的值已经不是1234567,因为定义的b是个2个字节的,最大是65536,再大的数就会溢出,然后显示为负数的,同理,FFCA,FFCC也是过大,所以,m,n对应的十进制也是负数。追问我这里没有出错:
*m=123 , *n=1234567
m=2293620 ,n=2293616
int 好像占4个字节
追答对了,不同的平台可能int的字节大小也不一定的,与平台有关,平时开发,用的是size_t类型的。
热心网友
时间:2024-03-07 12:19
调试,vc6 有调试功能,就是加一个断点,再点击调试图标,不是感叹号,调到你想看的那句后,工作空间下边有两个窗口,右边的那个有左右两排网格,在左边输入你的变量或地址,右边会自动显示对应的值,大致就是这样,如果有错的话,你自己试试
热心网友
时间:2024-03-07 12:20
*和&是一对相反意义的运算符,一个取值(仅连地址量),一个取地址(仅连变量)。