我在使用C语言的指针时遇到了一个令人困惑的问题。我已经进行了大量的搜索,但没有得到令我满意的答案。这就是问题所在:
我声明了一个INT类型的指针和一个INT类型的变量(例如int x,*pointer)。假设它们在RAM中占用连续的地址,比如0x102和0x106。到目前为止都没有问题。然后,我声明x = 5。我的内存映射应该是这样的,对吗?
我的内存映射应该是这样的:
到目前为止都很好。但问题是:如果我不是像上面那样赋值指针,而是这样子:
“x”的内存地址不应存储在指针的内存地址中吗?我一直想知道类似于“Memory Map 2”这样的东西,但结果与“Memory Map 1”的结果相同,即0x106地址包含垃圾数字。那么,如果“x”的内存地址未存储在指针的内存地址中,程序如何知道我想要指向哪里?这些信息存储在哪里?
这看起来是一个简单的问题,但我无法理解。 :(
提前致谢! :)
我声明了一个INT类型的指针和一个INT类型的变量(例如int x,*pointer)。假设它们在RAM中占用连续的地址,比如0x102和0x106。到目前为止都没有问题。然后,我声明x = 5。我的内存映射应该是这样的,对吗?
int x, *pointer;
x = 5;
好的。在大学里我学到了如何这样给指针赋值:
pointer = &x;
我的内存映射应该是这样的:
![pointer2](https://istack.dev59.com/hRjLv.webp)
*pointer = x;
“x”的内存地址不应存储在指针的内存地址中吗?我一直想知道类似于“Memory Map 2”这样的东西,但结果与“Memory Map 1”的结果相同,即0x106地址包含垃圾数字。那么,如果“x”的内存地址未存储在指针的内存地址中,程序如何知道我想要指向哪里?这些信息存储在哪里?
这看起来是一个简单的问题,但我无法理解。 :(
提前致谢! :)
int x,*pointer;
pointer = (int *)malloc(sizeof(pointer));
根据定义,如果我printf("%d", *pointer),这个指令应该打印包含在&pointer中的地址的内容,也就是垃圾,对吗? - user2373016*
时,会给你一个变量——一个你可以存储东西的位置。其他所有关于指针是内存地址之类的东西都是你可以忽略的实现细节。指针不需要是一个地址,它只需要是一种在你解引用它时能给你一个变量的东西。 - Eric Lippert