如何打印作为参数传递的特定内存地址?

时间:2013-12-24 23:00:58

标签: c memory memory-management

我想打印地址内存,但我想将其作为参数传递。我试过这个,但这不是我想要的。

我在打印矢量记忆的两个代码之间进行了一些比较,并且仅在一个案例中打印,相同的内存,但其中包含的值在两个代码中都不同。

#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;
}

因此,每次运行第一个代码时,我都会获得一个内存,当我运行第二个代码时,它也会打印出来,但是它们内部的值是不同的。为什么?

1 个答案:

答案 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写的值,即垃圾