C中關於指針數組的用法


 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"。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM