请问上面这个题目,哪里有出问题,这是面试官问新进人员的题目之一,看也知道这程式丢到 Dev-C++ 是不会过的,a b 都是宣告为整数指标型态,可是在 a=1 或 b=1 在 Dev-C++ 里面是编译不过的,但是那写法是没有错的,就像你设定 a=0 或者是 a=NULL 是一样意思,不过最好是不要这样写,assignment 这样写不太好,可以改成 a = (int )1; b = (int )1; 这样就可以顺利编译通过,再来 printf("%d\n"a+b); 这行错很大,指标相加会爆炸吧,如果程式这样写,不把 OS 搞挂,那我还会觉得怀疑呢,正确写法是指标加上 offset(位移),这样才是可以正确执行的,所以我们把程式改成下面:

最后的执行结果是 5,(int) b 就相当于 sizeof(b) 也等于 sizeof(int ) 答案都是四,所以就是 1+4 =5,指标是不能相加的,只能透过 offset 方式来让指标指向不同 base,但是如果是指标相减,那就是求 offset 的意思喔,看一下底下例子

要算 offset 也非常容易,只要先转成 10 进位相减在除以 sizeof(int *) 这样就可以求出结果了,a-b 除以四其实 -2.5 取补数,所以是 -3,如果是 b-a 就是整数3了,只是位移 3 个 bit,其实观念就是这样,指标位址不能相加,但是指标位址可以相减 = Offset,观念大致上是这样,最后补上完整程式,大家可以 run 一次看看就知道了