1 typedef char(*AP)[5]; 2 3 AP foo(char *p) 4 { 5 for(int i = 0; i < 3; i++) 6 p[strlen(p)] = 'A'; 7 return (AP)p + 1; 8 } 9 10 int main(void) 11 { 12 char s[] = "FROG\0SEAL\0LION\0LAMB"; 13 puts(foo(s)[1] + 2); 14 }
結果是:"ONALAMB"
分析過程:typedef char (*AP)[5]; 聲明了一個指向類型為char元素個數為5的一維數組。
return (AP)p + 1; 其中(AP)p為強制類型轉換,使p轉換為指向一維數組的指針,其中的元素個數為5。foo函數返回的地址為:p指向 'S'
foo(s)[1]: 由於返回的類型是AP,相當於強制轉換,類似於 (AP)p 將p強制轉換為指向一維數組的指針,同樣的元素個數為5。p[1] 現在指向了 'L'
最后,由於foo(s)[1] + 2, 再向后移動兩個元素,使得p指向了 'O'。
補充:foo函數的作用就是將 s[] 數組中的 '\0' 變成: 'A'.
因此,得到了最后的結果: "ONALAMB"。