題目:請寫出以下代碼輸出
int a[5] = {1, 2, 3, 4, 5};
int *ptr = (int *)(&a + 1);
printf("%d, %d", *(a + 1), *(ptr + 1)); // 2,隨機(jī)值
輸出解釋:
a代表有5個(gè)元素的數(shù)組的首地址汗侵,a[5]的元素分別是1幸缕,2,3晰韵,4发乔,5。接下來雪猪,a + 1表示數(shù)據(jù)首地址加1栏尚,那么就是a[1],也就是對應(yīng)于值為2.但是只恨,這里是&a + 1译仗,因?yàn)閍代表的是整個(gè)數(shù)組,它的空間大小為5 * sizeof(int)官觅,因此&a + 1就是a+5纵菌。a是個(gè)常量指針,指向當(dāng)前數(shù)組的首地址休涤,指針+1就是移動sizeof(int)個(gè)字節(jié)咱圆。
因此,ptr是指向int 類型的指針滑绒,而ptr指向的就是a + 5闷堡,那么ptr + 1也相當(dāng)于a + 6,所以最后的(ptr + 1)就是一個(gè)隨機(jī)值了疑故。而*(ptr – 1)就相當(dāng)于a + 4杠览,對應(yīng)的值就是5。