编写三地址码时何时使用地址(&a)?数组寻址三地址码疑问
三地址码相关问题解答
一、编写三地址码时何时使用地址(&a)
- 当你需要获取变量或数组的内存起始地址时使用。比如要传递指针参数、手动计算数组元素的内存位置,或者进行其他需要直接操作内存地址的场景。
二、T1=4×i、T3=4×i的操作逻辑
这是针对C语言中int类型数组的内存计算规则:默认int类型占4字节,数组在内存中是连续存储的,数组名a本质是指向第一个元素的指针(即&a[0])。
要访问a[i],需要先算出该元素的内存偏移量:i × 每个int元素的字节数(4),三地址码里的T1=4×i就是在计算这个偏移量。之后T2=a[T1],就是用数组的基地址(a指向的地址)加上偏移量T1,从内存中取出a[i]的值。同理,T3=4×i是计算b[i]的内存偏移量。
三、为什么不能直接写t1 = a[i]这类三地址码
三地址码的核心规则是每个语句只能执行单一操作,且最多包含三个操作数。a[i]看似简单,实则包含两步底层操作:先计算元素的内存地址(基地址+偏移量),再从该地址读取值。这不符合三地址码“一步一操作”的要求,必须拆分为两个独立的三地址码语句。
你写的t1 = a[i]属于高层语法的简化写法,隐含了底层的地址计算和内存读取逻辑,而三地址码需要把每一个底层操作都明确拆分出来,方便编译器后续做优化、生成机器码等环节的处理。
内容的提问来源于stack exchange,提问作者user20378821
相关产品推荐
相关产品推荐

