c - 当操作数是 C 中的指针时,编译器如何处理运算符 +

标签 c pointers compiler-construction

<分区>

例如。

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/

相关文章:

c - 使用 imagemagick API 截图

c - STM32 HAL SPI 中断处理

c - Visual Studio 中的远指针声明

c - 从不同结构类型中的指针向结构指针赋值

c++ - 我如何学习包含和链接到库?

c - Vala构建共享库时是否存在内存泄漏?

c - 如何在C中用数组填充结构的指针元素

c - 在行 : str = (char *) malloc(15); what does the (char *) mean?

algorithm - 如何确保命名参数列表的评估顺序和形式参数顺序?

java - 是否有可以在 JRE 6 上使用 Java 5 编译器但不能使用 Java 6 编译器编译的 Java 程序片段?