- 相关推荐
电脑入门:C语言内存地址基础
从计算机内存的角度思考C语言中的一切东东,是挺有帮助的。我们可以把计算机内存想象成一个字节数组,内存中每一个地址表示 1 字节。比方说我们的电脑有 4K 内存,那这个内存数组将会有 4096 个元素。当我们谈论一个存储地址的指针时,就当相于我们在谈论一个存储着该内存数组某个元素索引的指针。逆向引用某个指针,将会得到数组中该索引所指向的值。这一切当然都是谎言。操作系统对内存的管理要远比这复杂。内存不一定连续,也不一定按顺序处理。但前面的类比是一种讨论C语言内存的简单方式。
如果对『指针』、『地址』和『逆向引用』感到混乱,请看《C语言指针5分钟教程》(发送 指针,可看全文)。// 译注:“dereferencing” 的译法比较多,本文采用了“逆向引用”。
假设我们的计算机有 4K 的内存,下一个开放地址的索引是2048。我们声明一个新的字符变量i='a'。当该变量所获得的内存放置了它的值,变量的名字也与内存中的该位置关联,我们的字符i就获得了一个存储在2048位置的值。该字符是单字节的因此它只占用了索引为 2048 的位置。如果我们对 i 变量使用地址操作符(&),它将返回到索引为2048的位置。如果这个变量是另一种类型,比如是 int,它将占用4字节,在数组中占用索引为 2048-2051 的位置。使用地址操作符仍将返回索引2048的位置,因为 int 型即便占用了 4 字节,但它开始于 2048 位置。我们看一个例子:
// intialize a char variable, print its address and the next address
char charvar = '