昨晚在微信上和老友讨论c语言指针的相关问题,得到点收获。他和我一样,都是2016年6月份毕业的,从事的也都是嵌入式软件开发工作。下来,我尝试着将讨论的内容讲清楚。
说明,下面测试程序会用到两个宏: NUM和ERRP,它们的原型为:
#define ERRP(con, ret, ...) do \
if (con){ \
printf(__VA_ARGS__); \
ret; \
}while(0)
#define NUM 5
1. 指针的减法运算
int* intPoint = NULL;
void* voidPoint = NULL;
intPoint = (int* )malloc(sizeof(int) * NUM);
ERRP(NULL == intPoint, return -1, "intPoint: malloc memory failed!!\n");
voidPoint = malloc(sizeof(int) * NUM);
ERRP(NULL == voidPoint, return -1, "voidPoint: malloc memory failed!!\n");
printf("voidPoint = %p, voidPoint + sizeof(int) * 5 = %p\n", voidPoint, voidPoint + sizeof(int) * 5);
printf("(voidPoint + 5 * sizeof(int)) - voidPoint = %d\n", (voidPoint + 5 * sizeof(int)) - voidPoint);