直接上代码
#include <stdio.h>
int main()
{
int arr[2][10] = {0};
int *ptr[2];
ptr[0] = arr[0];
ptr[1] = arr[1];
arr[1][5] = 1;
ptr[1][6] = 2;
printf("arr[1][5] is %d\n", arr[1][5]);
printf("ptr[1][6] is %d\n", ptr[1][6]);
}
反汇编代码为
在执行arr[1][5]=1;时
直接movl $0x1,-0x24(%rbp)
,arr[1][5]的地址是直接算出来的
在执行ptr[1][6] = 2时
mov -0x68(%rbp),%rax
add $0x18,%rax
movl $0x2,(%rax)
先取得ptr[1]的值,再加上0x18,计算出ptr[1][6]的地址