学习交流可加
微信读者交流①群 (添加微信:coderAllen) 程序员技术QQ交流①群:736386324
**常见的一个疑问是: 归根结底, 指针就是地址, 地址就是内存中被分配的“门牌号”。 所以, 指针类型和 int类型应该是一回事吧!**
实际上, 从某种意义来看, 这种认识也不无道理。
在 C 语言前身的 B 语言中, 指针和整数是没有区别的。 此外, 虽然我们经常使用 printf()和%p 来表示指针, 实际上包括我的运行环境在内, 使用%x 也可以很好地表示地址。 对不太擅长十六进制的人来说, 通过使用%d, 也能利用十进制的方式来确认地址的内容。
很可惜, 这里说的运行环境并不具有普适性。 其实在很多的运行环境中, int 类型和指针类型的长度并不相同, 此外, 由于 Intel 8086 的功能限制, 在直到最近还被广泛使用的 MSDOS 中, 是通过将 16 位的值分成两组来表示 20 位的地址的。
8086 是分段寻址的, 具体来说是指一个物理地址由段地址( segment selector) 与偏移量( offset) 两部分组成, 长度各是 16 位。 其中段地址左移 4 位( 即乘以 16) 与偏移量相加即为物理地址
ANSI C 为我们准备了“可以指