之前的疑问和猜想
“指针是一块内存的地址,引用是内存的别名。”
内存还能有名字?是不是都是地址?
我知道局部变量存在于函数的数据栈上,我猜:
对操作系统来说,程序内的地址都是相对寻址,地址范围局限于进程的地址空间。把视角缩小,放到进程的地址空间里来看,在编译之后,局部变量和指针没有区别,二者长度相同,都是一个地址区别在于对两者的操作码不同。
CSAPP中的解答
“虽然C语言提供了一种模型,可以在内存中声明和分配各种数据类型的对象,但是机器代码只是简单地将内存看成一个很大的、按字节寻址的数组。C语言中的聚合数据类型,例如数组和结构,在机器代码中用一组连续的字节来表示。即使是对标量数据类型,汇编代码也不区分有符号或无符号整数,不区分各种类型的指针,甚至不区分指针和整数。”