//題目:若有程序段int a[5] = { 1, 2, 3, 4, 5 }; int *p = (int *)(&a + 1); printf("%d,%d", *(a + 1), *(p - 1)); 則輸出的結果是(),()
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <string.h> int main() { int a[5] = { 1, 2, 3, 4, 5 }; int *p = (int *)(&a + 1); //&a+1的意思為 a數組地址向右偏移一個a類型的數組地址大小, (int*)(&a+1)則表示解引用, //取此地址存放的值,這里的值為空 printf("%d,%d", *(a + 1), *(p - 1)); //*(a+1) a+1取a的第一個元素的偏移一個int地址,則為a[1]的地址 *(a+1)為解引用,取這里地址存放的值則為2 //*(p-1) 則這里的值為a[4]的值,所以為5 return 0; }
最后輸出的結果為2,5