前些時去面試在卷子上做到了這么一題(C),很有意思,拿出來共賞之。
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1327ab569c1ae82736693a50b8e33378.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
//問a[q - p]多少?
當時我想答3,可一看選項:0、1、2、4,。。。索性就填了4,後來回來一編譯,就是4,汗。。。
下面我們來仔細研究研究。
p是指向數組a的整型指針,它是“瞄準”數組a的第0個元素的地址,即用下標表示:&a[0],用指針偏移表示:a + 0。
為什么真么強調p是整形指針呢?因為數組名稱正好也就是數組的第一個元素的地址,換句話說想聲明一個指向數組第一個元素的指針同聲明一個指向數組的指針(數組指針)頗有些相似之處。比如說這里要聲明一個指向數組a的數組指針,就得這樣:
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
上面題中的q聲明的僅僅是個整型指針,所以不用受這些東西的迷惑。q是誰?q是&a[3],下標運算符[]的優先級高于取地址運算符&,所以就是對a[3]取地址,取來的就是數組a的第3個元素的地址,即用下標表示:&a[3],用指針偏移表示:a + 3,這就是q。
所以a[q - p] = a[(a + 0) - (a + 3)] = a[3] = 4。
確鑿無疑。