考慮http://c-faq.com/misc/hexio.html的例子,有什麼理由有一個額外的指針'靜態'字符緩衝區?爲什麼我們不能逃脫retbuf
?爲什麼在函數中有一個'靜態'定義?
回答
您需要一個指針,以便您可以存儲更改的地址。如果你只有retbuf
,你將不得不設計這個函數來使用一個變化的索引變量。例如: -
int ind = sizeof(retbuf)-1;
retbuf[ind] = '\0';
等
注意數組不是指針。數組是固定大小的內存區域。指針是一個地址。
感謝您的輸入,但我仍然沒有完全理解。考慮以上代碼片段: static char retbuf [33]; char * p; p =&retbuf [sizeof(retbuf)-1]; 爲什麼我們需要保留額外的指針'p'到'retbuf'?如果我們填入'retbuf',然後從函數中返回('return retbuf'),它將始終指向緩衝區的第一個元素,我在這裏錯了嗎? – Mark 2011-01-12 23:56:09
@Mark,首先,`p`並不總是等於函數末尾的`retbuf`的第一個元素。作爲一個簡單的例子,如果`num`爲0,`p`將保持等於'retbuf + sizeof(retbuf) - 1`。其次,在函數中使用*來跟蹤要寫入哪個位置。 – 2011-01-13 00:07:25
如果沒有static
關鍵字,緩衝區將被分配到堆棧上 - 並在函數返回給調用者時釋放。使用static
確保緩衝區在函數返回後有效。
- 1. 爲什麼const在靜態函數中是未定義的?
- 2. 在OCaml中爲遞歸函數定義一個靜態變量
- 3. 爲什麼其中一個模板靜態函數有效,另一個不是?
- 4. 爲什麼在函數定義之外引用靜態變量(函數屬性)?
- 5. 爲什麼非常量靜態成員有多個定義?
- 6. 爲什麼我們不能在靜態內部類中定義主函數?
- 7. 如何在函數中定義一個類的靜態成員?
- 8. 爲什麼CanvasRenderingContext2D.createLinearGradient()不是靜態函數?
- 9. 爲什麼這個靜態函數沒有調試符號?
- 10. 爲什麼沒有定義函數javascript
- 11. 爲什麼在一個方法中看不到「私有靜態」?
- 12. 爲什麼靜態函數消除Xcode中未定義的符號?
- 13. 靜態函數與類的靜態指針有什麼區別
- 14. 什麼存儲類是一個函數內部的靜態,爲什麼?
- 15. 爲什麼我的動態定義函數未定義?
- 16. 爲什麼在LKM中使用靜態函數這是一個慣例
- 17. 爲什麼要在構造函數中添加一個靜態ArrayList泄漏?
- 18. 爲什麼非靜態引用錯誤,而沒有靜態定義?
- 19. 爲什麼在cpp文件中定義非int常量靜態?
- 20. 爲什麼不在LinkedList中定義ListIterator的靜態類?
- 21. 爲什麼只能在靜態類中定義暴露方法?
- 22. 爲什麼JNI在枚舉中找不到自定義靜態?
- 23. 爲什麼沒有數學函數的靜態庫?
- 24. 爲什麼一個靜態構造沒有任何參數
- 25. 在非靜態類中聲明一個靜態方法的意義是什麼?
- 26. 爲什麼在$()裏面定義函數?
- 27. 爲什麼靜態成員函數只能在類定義中聲明爲靜態而不是在其自己的定義中聲明?
- 28. 爲什麼P/Invoke函數在C#中是靜態的?
- 29. 爲什麼friend類會在靜態函數調用中崩潰?
- 30. 爲什麼在PHP中靜態函數之前公開?
你問我們爲什麼需要`static`關鍵字,或者爲什麼有一個'char * p'指針指向'retbuf`? – 2011-01-12 07:20:54