指针算术混淆

时间:2015-03-23 10:35:19

标签: c

我看到下面的代码片段总是返回1而不是4不能真正弄清楚出错了什么

#include <stdio.h>
int main(void) {
   int a[4] = {1,2,3,4};
   int *p = a;

   p++;
   printf("%ld\n",(long int)(p-a));
   return 0;
}

1 个答案:

答案 0 :(得分:4)

这是指针算法的基础知识。当你有:

int a[4] = {0};
int *p = a;

当你执行p++时 - 编译器会自动增加p 四个字节(如果整数大小为四)。 如果减去1,则减法也会发生相同的情况 从p编译器将自动减去四个字节。 但似乎更准确地回答了你的问题 应用于指针类型时的-运算符 将结果除以元素类型的大小 指针指向。