【发布时间】:2013-07-21 04:39:05
【问题描述】:
例如。
int a[]={3,4};
int *p1=a;
int *p2=a+1;
最后一行,编译器怎么知道这行的+1不是普通的加法,而是地址加法。它如何与常见的添加区分开来,例如
int i=1+2。
有人可以在寄存器级别解释一下吗?
【问题讨论】:
-
嗯,事实上它不是在 int 上运行?
-
向指针添加一个使其指向连续内存位置中同类的下一个元素。例如在将 1 添加到
int*指针时,指向下一个 int。现在明白即使是一个 int 是 4(或 8)字节的指针值也是第一个单元地址值(但这个指针代表完整的int)。现在,在将1添加到该指针值时,它将开始依次指向下一个int,因此大小指针地址值按int的大小递增。因此,将1添加到指针不是算术而是逻辑递增它。
标签: c pointers compiler-construction