<分区>
例如。
int a[]={3,4};
int *p1=a;
int *p2=a+1;
在最后一行,编译器怎么知道这行的+1
不是普通的加法,而是地址加法。怎么区别于常见的加法比如
int i=1+2
。
有人可以在寄存器级别解释一下吗?
<分区>
例如。
int a[]={3,4};
int *p1=a;
int *p2=a+1;
在最后一行,编译器怎么知道这行的+1
不是普通的加法,而是地址加法。怎么区别于常见的加法比如
int i=1+2
。
有人可以在寄存器级别解释一下吗?
最佳答案
当您将标量添加到指针时,就像执行 &pointer[scalar]
一样。例如:
int * path = 0x1234;
path += 1;
printf("%p\n", path);
以上代码在 32 位系统上打印出 0x1238
。
编辑:澄清一下,将 n
添加到指针会使指针偏移 n * sizeof(element)
字节。
关于c - 当操作数是 C 中的指针时,编译器如何处理运算符 +,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17769104/