我想打印地址内存,但我想将其作为参数传递。我试过这个,但这不是我想要的。
我在打印矢量记忆的两个代码之间进行了一些比较,并且仅在一个案例中打印,相同的内存,但其中包含的值在两个代码中都不同。
#include<stdio.h>
int main()
{
int i,vet[10];
for(i=0; i<10; i++)
vet[i] = i;
for(i=0; i<10; i++)
printf(" %d ", vet[i]);
printf("\n\n");
for(i=0; i<10; i++)
printf(" %d ", &vet[i]);
return 0;
}
在上面的代码中,我只打印了一个数组及其内存地址。
所以,下面的代码,我打印了一个数组及其内存,但我故意打印的内容超过了我的矢量。
#include<stdio.h>
int main()
{
int i, vet[2] = {0, 1}; /*I declared just 2 positions of memory*/
printf("\n %d ", &vet[1]);
printf("\n %d ", vet[1]);
for(i=0; i<100; i++) /*And printed 100 positions, so, printed memory that does not belong to it*/
{
printf("\n %d ", &*(vet + i) );
printf(" %d ", vet[i] );
}
return 0;
}
因此,每次运行第一个代码时,我都会获得一个内存,当我运行第二个代码时,它也会打印出来,但是它们内部的值是不同的。为什么?
答案 0 :(得分:2)
每个程序都在自己的虚拟内存空间中运行,因此您的第二个程序很可能无法访问第一个程序的内存位置,因此您打印的是垃圾值,存储在第二个程序内的特定逻辑位置程序的内存空间。
即使在程序分配的内存空间中,也可能在不同的运行中为同一个变量分配不同的内存位置。
编辑:
您试图说打印的内存位置相同,但值不同。这是预期的,因为,您正在打印的内存位置是当前程序内的LOGICAL内存位置,但不是相同的PHYSICAL内存位置,因为两个程序具有相同的结构,所以LOGICAL内存位置相同。
尝试在第二个程序中的数组定义之前声明一个新变量,然后您将获得正在打印的内存的不同值。
编辑:
程序1,假设在物理位置运行
1000 - 2000
它将数组写入1200-1400
逻辑位置为200-400
第三个元素位于600逻辑位置,即1600物理位置
程序2在物理位置运行
3000-4000
以3200
启动数组现在你正在尝试读取3600,你假设它应该是1600,因为指针返回的内存地址是600,但物理地址是3600,这与1600不同,所以你正在阅读一些其他程序3在3600写的值,即垃圾